私は、次のコード作成:asyncとawaitはシングルスレッドです本当ですか?
using System;
using System.Threading.Tasks;
namespace ConsoleApplication2
{
class Program
{
static void Main()
{
Console.WriteLine("M Start");
MyMethodAsync();
Console.WriteLine("M end");
Console.Read();
}
static async Task MyMethodAsync()
{
await Task.Yield();
Task<int> longRunningTask = LongRunningOperationAsync();
Console.WriteLine("M3");
//and now we call await on the task
int result = await longRunningTask;
//use the result
Console.WriteLine(result);
}
static async Task<int> LongRunningOperationAsync()
{
await Task.Delay(1000);
return 1;
}
}
}
出力:その後、 そして、この:罰金ですが、私はスレッド・プロファイラーでその番組を見たときに、この
M Start
M end
M3
1
私はスレッドを生成が、MSDNから言うように:非同期と待つと非同期プログラミングから
:スレッド
非同期およびキーワードを待つには、追加のスレッドが が作成されることはありません。非同期メソッドは、非同期 メソッドが独自のスレッドで実行されないため、マルチスレッドを必要としません。このメソッドは、現在の 同期コンテキストで実行され、 メソッドがアクティブな場合にのみ、スレッドで時間を使用します。 Task.Runを使用してCPUバインドされた作業を バックグラウンドスレッドに移動できますが、バックグラウンドスレッドは結果が利用可能になるのを待っているプロセス では役に立ちません。
何か不明か何かを理解していませんか?おかげさまで
スレッドプールの既存のスレッドを使用します。作成しないでください –
Visual Studioでは本当に気の利いたウィンドウのようです。トピック以外の質問に申し訳ありませんが、どのバージョンでサポートされていますか? –
あなたの出力を 'Thread.CurrentThread.ManagedThreadId'で装飾すると、3つのスレッドが使用されていることが分かります。 –