次のコードを検討してください
public static async Task<int> Answer()
{
await Task.Delay(1000);
return 42;
}
static void Main(string[] args)
{
for (int j = 0; j < 20; j++)
{
Console.WriteLine(j +" " + Thread.CurrentThread.IsThreadPoolThread);
if (j == 1)
{
new Task( async ()=>
{
int answer = await Answer();
Console.WriteLine(answer + " " + Thread.CurrentThread.IsThreadPoolThread);
}).Start();
}
Thread.Sleep(200);
}
return;
CurrentThread.IsThreadPoolThread
when printingの答えは何だと思いますか?
Task.Delay(..)
await を削除すると、答えはFalse
. Delay
ただし、ドキュメントのスレッドプールに実際に何かを配置しているようには見えません。
これは、より一般的な質問につながります。以外に、実際にスレッド プール スレッドを開始するTaskはRun(..)
何ですか?
編集:
置き換えnew Task(...)
Ask()
public static async void Ask()
{
int answer = await Answer();
Console.WriteLine(answer + " " + Thread.CurrentThread.IsThreadPoolThread);
}
同じ結果が得られます