2011-01-27 24 views
3

我正在研究新的Async CTP並通過一些示例代碼,我在哪裏可以找到ThreadPool.SwitchTo方法?

我遇到了這段代碼:

public async void button1_Click(object sender, EventArgs e) 
{ 
string text = txtInput.Text; 

await ThreadPool.SwitchTo(); // jump to the ThreadPool 

string result = ComputeOutput(text); 
string finalResult = ProcessOutput(result); 

await txtOutput.Dispatcher.SwitchTo(); // jump to the TextBox’s thread 

txtOutput.Text = finalResult; 
} 

請問我在哪裏可以找到ThreadPool.SwitchTo? SwithcTo方法不在ThreadPool類

我有一個參考AsyncCtpLibrary.dll ...但沒有運氣

+0

它看起來像我的擴展方法。 –

+0

假設您已經在Visual Studio中加載了代碼,請右鍵單擊該方法的名稱並選擇「轉到定義」。它會立即將您帶到定義該方法的位置,以便您可以研究它。我懷疑chibacity的假設是它是一個在'ThreadPool'類中定義的擴展方法是正確的。 –

+0

所以我雖然,但從哪裏?我添加了對AsyncCtpLibrary.dll的引用,但沒有運氣 –

回答

2

僅供參考,CharlesO回答的註釋中他的問題上面:

OK,發現它們,總結:提供了 與ThreadPool進行交互的方法。備註:ThreadPoolEx是一個 佔位符。

公共共享功能SWITCHTO()作爲 System.Runtime.CompilerServices.YieldAwaitable 會員 System.Threading.ThreadPoolEx摘要: 創建一個awaitable等待時 異步產生的 線程池。

1

ThreadPool.SwitchTo被刪除,據推測是因爲它是anit模式。考慮在切換回原始上下文之前拋出異常會發生什麼。您不能使用finally塊作爲對策來防範該異常並切換回去,因爲await不能出現在finally塊中。

public async void button1_Click(object sender, EventArgs e) 
{ 
    await ThreadPool.SwitchTo(); 
    try 
    { 
    // Do something dangerous here. 
    } 
    finally 
    { 
    await button1.Dispatcher.SwitchTo(); // COMPILE ERROR! 
    } 

} 

你可以,當然,開發定製awaitable和awaiter類型實現移除什麼。然而,使用Task.Run 要比通過await中途切換上下文好得多。

相關問題