あなたが本当にしたいのはTask.Run
、カスタムスケジューラを使用することだと思います。StartNew
非同期メソッドでは直感的に機能しません。Stephen Toub は、との違いTask.Run
TaskFactory.StartNew
について素晴らしいブログ投稿をしています。
したがって、独自の custom を作成するには、次のRun
ようにします。
private static readonly TaskFactory myTaskFactory = new TaskFactory(
CancellationToken.None, TaskCreationOptions.DenyChildAttach,
TaskContinuationOptions.None, new MyTaskScheduler());
private static Task RunOnMyScheduler(Func<Task> func)
{
return myTaskFactory.StartNew(func).Unwrap();
}
private static Task<T> RunOnMyScheduler<T>(Func<Task<T>> func)
{
return myTaskFactory.StartNew(func).Unwrap();
}
private static Task RunOnMyScheduler(Action func)
{
return myTaskFactory.StartNew(func);
}
private static Task<T> RunOnMyScheduler<T>(Func<T> func)
{
return myTaskFactory.StartNew(func);
}
その後、カスタム スケジューラで同期または非同期メソッドを実行できます。