5using System.Threading.Tasks;
10 partial class ExecutionContext
16 class ExecutionContextDispatcher : MarshalByRefObject
19 readonly
string[] _args;
26 public ExecutionContextDispatcher(
string[] args)
28 _args = args ??
throw new ArgumentNullException(nameof(args));
37 return Task.Run(() => ImportTool.ExecuteInContext(_args)).GetAwaiter().GetResult();
43 ExecutionContextDispatcher dispatcher;
50 public ExecutionContext(
string[] args)
52 appDomain = AppDomain.CreateDomain(
54 AppDomain.CurrentDomain.Evidence,
57 ApplicationBase = AppDomain.CurrentDomain.SetupInformation.ApplicationBase,
58 ConfigurationFile = AppDomain.CurrentDomain.SetupInformation.ConfigurationFile,
61 dispatcher = (ExecutionContextDispatcher)appDomain.CreateInstanceAndUnwrap(
62 typeof(ExecutionContextDispatcher).
Assembly.GetName().FullName,
63 typeof(ExecutionContextDispatcher).FullName,
65 System.Reflection.BindingFlags.Default,
77 public partial async Task<int>
ExecuteAsync(CancellationToken cancellationToken)
79 return await Task.Run(dispatcher.Execute);
90 if (appDomain !=
null)
91 AppDomain.Unload(appDomain);
102 GC.SuppressFinalize(
this);
IKVM.Reflection.Assembly Assembly
partial Task< int > ExecuteAsync(CancellationToken cancellationToken)
Executes the importer logic.