私は.NET 4.0以降のタスク並列ライブラリの概念の把握を取得しようとしています...次のC#4.0のコードスニペットで非汎用タスク(C#4.0以降)でタスクの結果プロパティを使用できないのはなぜですか?
:
Task t = Task.Factory.StartNew(() =>
{
Console.WriteLine("I am the task");
return "res1";
});
コンパイラはしていません(と実行時のいずれかの理由代わりにジェネリックタスクを使用しない限りリターンが使用できない場合はエラーが発生します。
Task<string> t = Task.Factory.StartNew(() =>
{
Console.WriteLine("I am the task");
return "res1";
});
または(返されるオブジェクト)を使用できますか?
Task<string>
の<string>
は、戻り値の種類(edオブジェクト)の検出または保証にのみ必要であることを正しく理解していますか?t.Result
?
これ以外の私の必需品から隠された他のものがありますか?
返されるオブジェクトの型からこの型を判別できないのはなぜですか?
I.非ジェネリックタスクでタスクのResultプロパティを使用できないのはなぜですか?
はい、私はそれを見ましたが、なぜ非ジェネリックなタスクが「結果」プロパティを持つことができないのか理解できませんでした。 – Fulproof
@Fulproof概念的なことです。 'Task'は非同期/タスクワールドの' void'戻り型とほぼ概念的に同等ですが、 'Task 'は' T'戻り型と同等です。さて、 'void Foo()'メソッドを与えれば、 'var result = Foo();'を実行しようとしませんでしたか? :) –
なぜ、ジェネリックでないタスク「アクティビティ」からのリターンは、エラーまたは警告としてコンパイラによって決定されないのですか? – Fulproof