mirror of
https://github.com/goatcorp/Dalamud.git
synced 2025-12-12 10:17:22 +01:00
Use long running task for plugin ctor
This commit is contained in:
parent
0047e24031
commit
e566635990
1 changed files with 8 additions and 20 deletions
|
|
@ -112,27 +112,15 @@ internal class ServiceContainer : IServiceProvider, IServiceType
|
|||
errorStep = "property injection";
|
||||
await this.InjectProperties(instance, scopedObjects, scope);
|
||||
|
||||
// Invoke ctor from a separate thread (LongRunning will spawn a new one)
|
||||
// so that it does not count towards thread pool active threads cap.
|
||||
// Plugin ctor can block to wait for Tasks, as we currently do not support asynchronous plugin init.
|
||||
errorStep = "ctor invocation";
|
||||
var tcs = new TaskCompletionSource(TaskCreationOptions.RunContinuationsAsynchronously);
|
||||
var thr = new Thread(
|
||||
() =>
|
||||
{
|
||||
try
|
||||
{
|
||||
ctor.Invoke(instance, resolvedParams);
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
tcs.SetException(e);
|
||||
return;
|
||||
}
|
||||
|
||||
tcs.SetResult();
|
||||
});
|
||||
|
||||
thr.Start();
|
||||
await tcs.Task.ConfigureAwait(false);
|
||||
thr.Join();
|
||||
await Task.Factory.StartNew(
|
||||
() => ctor.Invoke(instance, resolvedParams),
|
||||
CancellationToken.None,
|
||||
TaskCreationOptions.LongRunning,
|
||||
TaskScheduler.Default).ConfigureAwait(false);
|
||||
|
||||
return instance;
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue