fork download
  1. using System;
  2. using System.Threading;
  3. using System.Threading.Tasks;
  4.  
  5. class Program
  6. {
  7. static void Main(string[] args)
  8. {
  9. var newDomain = AppDomain.CreateDomain("Worker domain");
  10. newDomain.DomainUnload += (o, e) =>
  11. Console.WriteLine($"App domain unload event in thread {Thread.CurrentThread.ManagedThreadId}, domain {AppDomain.CurrentDomain.FriendlyName}, at {DateTime.Now}");
  12.  
  13. Task.Run(() =>
  14. {
  15. Thread.Sleep(1000);
  16. Console.WriteLine($"App domain killer in thread {Thread.CurrentThread.ManagedThreadId}, domain {AppDomain.CurrentDomain.FriendlyName}, at {DateTime.Now}");
  17. AppDomain.Unload(newDomain);
  18. });
  19.  
  20. Worker remoteWorker = (Worker)newDomain.CreateInstanceAndUnwrap(
  21. typeof(Worker).Assembly.FullName, typeof(Worker).FullName);
  22. var result = remoteWorker.Work();
  23. Console.WriteLine(result);
  24. }
  25. }
  26.  
  27. class Worker : MarshalByRefObject
  28. {
  29. public int Work()
  30. {
  31. int result = 0;
  32. try
  33. {
  34. // nothing
  35. }
  36. finally
  37. {
  38. Console.WriteLine($"Worker.Work in thread {Thread.CurrentThread.ManagedThreadId}, domain {AppDomain.CurrentDomain.FriendlyName}, at {DateTime.Now}");
  39. for (int i = 0; i < 4; i++)
  40. {
  41. result += 1;
  42. Thread.Sleep(1000);
  43. Console.WriteLine($"Worker.Work in thread {Thread.CurrentThread.ManagedThreadId}, domain {AppDomain.CurrentDomain.FriendlyName}, at {DateTime.Now}");
  44. }
  45. }
  46. return result;
  47. }
  48. }
  49.  
Success #stdin #stdout 0.2s 477440KB
stdin
Standard input is empty
stdout
Worker.Work in thread 1, domain Worker domain, at 7/22/2017 11:02:04 AM
App domain killer in thread 4, domain prog.exe, at 7/22/2017 11:02:05 AM
App domain unload event in thread 4, domain Worker domain, at 7/22/2017 11:02:05 AM
Worker.Work in thread 1, domain Worker domain, at 7/22/2017 11:02:05 AM
Worker.Work in thread 1, domain Worker domain, at 7/22/2017 11:02:06 AM
Worker.Work in thread 1, domain Worker domain, at 7/22/2017 11:02:07 AM
Worker.Work in thread 1, domain Worker domain, at 7/22/2017 11:02:08 AM