タスクがメインスレッド以外のスレッドで実行されていることを確認できますか?そのため、このコードは呼び出し元のスレッドを起動しませんでしたか?Thread.SleepをTask.Runでメイントレイルをブロックせずに使用する
var task = Task.Run(() =>
{
//third party code i don't have access to
Thread.Sleep(3000);
});
私はTask.Delay
があることを知っているが、私は、タスクを別のスレッドで実行されますことを確認します。
私は間違っているかもしれませんので、私の論理に従ってください:['Task。Run'](https://msdn.microsoft.com/en-us/library/system.threading.tasks.task.run(v = vs.110).aspx)「指定した作業をThreadPoolで実行するようにキューに入れる」 、私は*これが[マネージドスレッドプール](https://msdn.microsoft.com/en-us/library/0ka9477y(v = vs.110).aspx)であると仮定します。バックグラウンドスレッド "と呼びます。したがって、すべての 'Task.Run'呼び出しはバックグラウンドスレッド上でスレッドを生成します。 'Main'スレッドは常にフォアグラウンドスレッドであると仮定します。そうすれば、' Task.Run'は決してメインスレッドにはありません。 'Thread.CurrentThread.IsBackground'でチェックしてください。 – Quantic
情報ありがとう、私はそれについて調べます。私は、タスクスケジューラが正しいと考えるものに応じて、タスクが別のスレッドで実行されているかどうかを前提にしていました。だから私はそれが別のスレッドであることを確認することを探していた。しかし、あなたが正しいなら、これは常にそうです。 – thalm
メインスレッドで実行できる唯一の方法は、メインスレッドから実行を開始する前に[タスクインライン化](https://blogs.msdn.microsoft.com/pfxteam/2009/10)を実行することです。/15/task-wait-and-inlining /))。それ以外は、スレッドプール上で実行されます。 – Douglas