b807be35ff
* add tests for threadcontext * add test for extensions * remove needed usage
40 lines
1.2 KiB
C#
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;
|
|
}
|
|
}
|