Files
speckle-sharp-connectors/Sdk/Speckle.Connectors.Common/Threading/DefaultThreadContext.cs
T
Adam Hathcock b807be35ff test: add tests for threadcontext (#651)
* add tests for threadcontext

* add test for extensions

* remove needed usage
2025-03-07 16:27:58 +03:00

40 lines
1.2 KiB
C#

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<T> WorkerToMainAsync<T>(Func<Task<T>> action)
{
var t = Task.Factory.StartNew(action, default, TaskCreationOptions.AttachedToParent, _uiTaskScheduler);
return t.Unwrap();
}
protected override Task<T> MainToWorkerAsync<T>(Func<Task<T>> action)
{
Task<Task<T>> f = Task.Factory.StartNew(
action,
default,
TaskCreationOptions.AttachedToParent,
TaskScheduler.Default
);
return f.Unwrap();
}
protected override Task<T> WorkerToMain<T>(Func<T> action)
{
var t = Task.Factory.StartNew(action, default, TaskCreationOptions.AttachedToParent, _uiTaskScheduler);
return t;
}
protected override Task<T> MainToWorker<T>(Func<T> action)
{
Task<T> f = Task.Factory.StartNew(action, default, TaskCreationOptions.LongRunning, TaskScheduler.Default);
return f;
}
}