以下代碼,我儘量不工作每一個變化異步方法 - 無論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
將在更晚複雜。當此動作完成時,無論多長時間,我都希望Task
(或其他框架機制)通過將xD分配"Howdy ..."
,然後再分配給y來恢復。我真正想要做的是攔截等候的物體,處理它們,並在稍後我控制的時候,繼續執行結果(x
和y
)。但是,我在這一大步中並沒有走得太遠,所以我試圖從更小的一步開始。
你在做什麼?當我們不知道「工作」是什麼樣子時,很難知道「不工作」是什麼意思。 –
我希望它能夠完成。由於我的理解有多麼錯誤,對我而言,這似乎很明顯應該做什麼。 –
@uosef:運行什麼?這裏沒有任何異步嗎? –