using System.Diagnostics.CodeAnalysis; namespace Speckle.Connectors.Common.Threading; [ExcludeFromCodeCoverage] public class DefaultThreadContext : ThreadContext { //should be always newed up on the host app's main thread private readonly TaskScheduler _uiTaskScheduler = TaskScheduler.FromCurrentSynchronizationContext(); protected override Task WorkerToMainAsync(Func> action) { var t = Task.Factory.StartNew(action, default, TaskCreationOptions.AttachedToParent, _uiTaskScheduler); return t.Unwrap(); } protected override Task MainToWorkerAsync(Func> action) { Task> f = Task.Factory.StartNew( action, default, TaskCreationOptions.AttachedToParent, TaskScheduler.Default ); return f.Unwrap(); } protected override Task WorkerToMain(Func action) { var t = Task.Factory.StartNew(action, default, TaskCreationOptions.AttachedToParent, _uiTaskScheduler); return t; } protected override Task MainToWorker(Func action) { Task f = Task.Factory.StartNew(action, default, TaskCreationOptions.LongRunning, TaskScheduler.Default); return f; } }