私が試した次のコードのすべてのバリエーションは機能しDoSomething() : void
ませDoSomething() : Task
ん。表示されるエラーには、 、、およびが含まれます。TaskEx.RunEx()
.GetAwaiter().GetResult()
"Start may not be called on a task with null action"
"RunSynchronously may not be called on a task unbound to a delegate"
"The task has not yet completed"
class Program
{
static void Main(string[] args) // Starting from a non-async method
{
DoSomething();
Console.WriteLine("Press any key to quit.");
Console.ReadKey();
}
static async void DoSomething()
{
Console.WriteLine("Starting DoSomething ...");
var x = await PrepareAwaitable(1);
Console.WriteLine("::" + x);
var y = await PrepareAwaitable(2);
Console.WriteLine("::" + y);
}
static Task<string> PrepareAwaitable(int id)
{
return new Task<string>(() =>
{
return "Howdy " + id.ToString();
});
}
}
出力:
DoSomething を開始しています...
終了するには、任意のキーを押します。
PrepareAwaitable
のは後でより複雑になりますTask
。Action
このアクションが完了すると、時間がかかりますが、 (または他のフレームワークメカニズム)が x に割り当てられ、その後 y にTask
割り当てられることによって再開されると思います。"Howdy ..."
私が本当にやりたいことは、待機中のオブジェクトをインターセプトし、それらを処理し、後で制御して、結果 ( x
and y
) で継続を再開することです。しかし、私はその大きな一歩を踏み出すことができなかったので、小さな一歩から始めようとしています.