24 lines
648 B
C#
24 lines
648 B
C#
|
namespace E050_CEF;
|
|||
|
|
|||
|
internal static class AsyncContext
|
|||
|
{
|
|||
|
public static void Run(Func<Task> func)
|
|||
|
{
|
|||
|
var prevCtx = SynchronizationContext.Current;
|
|||
|
|
|||
|
try
|
|||
|
{
|
|||
|
var syncCtx = new SingleThreadSynchronizationContext();
|
|||
|
SynchronizationContext.SetSynchronizationContext(syncCtx);
|
|||
|
|
|||
|
Task t = func();
|
|||
|
t.ContinueWith(delegate { syncCtx.Complete(); }, TaskScheduler.Default);
|
|||
|
syncCtx.RunOnCurrentThread();
|
|||
|
t.GetAwaiter().GetResult();
|
|||
|
}
|
|||
|
finally
|
|||
|
{
|
|||
|
SynchronizationContext.SetSynchronizationContext(prevCtx);
|
|||
|
}
|
|||
|
}
|
|||
|
}
|