3

VS2012RC と .NET 4.5 を使用して、文字列を返す単純なデリゲートだけを使用して新しいキーワードasyncとキーワードを試しています。await

string message = await Task.Run(() => { return "something"; });

しかし、私が試してみるとWhenAny:

string message = await Task.WhenAny(new Task<string>(() => { return "something"; })).Result;

それは決して完了しません...なぜですか?

TechDays 2012 オランダの Steve Sanderson によるビデオを見てきました

4

1 に答える 1

4

コンストラクターを使用して を作成すると、Taskまだ開始されていません。Start()実際に開始するには、電話する必要があります。

Task.Run()2番目のバージョンでも使用する必要があると思います。これにより、Task既に開始されているが返されます。

また、デッドロックにつながる可能性があるため、非同期待機 ( await) と同期待機 (Resultまたは)を混在させることはお勧めできません。Wait()

だから、私はあなたのコードを次のように書きます:

var task = await Task.WhenAny(Task.Run(() => "something"));
string message = await task;

(もちろん、 がTask.WhenAny()1 つしかない場合に使用する理由はありませんTaskが、これは単なる例であると想定しています。)

于 2012-07-15T15:36:04.463 に答える