的對消抓到我有一個類Worker
這是做了一些工作(與模擬工作負載):異常沒有在Task.Run
public class Worker
{ ...
public void DoWork(CancellationToken ct)
{
for (int i = 0; i < 10; i++)
{
ct.ThrowIfCancellationRequested();
Thread.Sleep(2000);
}
}
現在我想在Task.Run
使用這種方法(從我的Windows窗體應用程序,在按鈕點擊),它可以被取消:
private CancellationTokenSource _ctSource;
try
{
Task.Run(() =>
{
_worker.DoWork(_ctSource.Token);
},_ctSource.Token);
}
catch (AggregateException aex)
{
String g = aex.Message;
}
catch (OperationCanceledException ex)
{
String g = ex.Message;
}
catch (Exception ex)
{
String g = ex.Message;
}
但是,當任務開始,我不能_ctSource.Cancel()
取消; 我在視覺工作室中發現錯誤,OperationCanceledException
未被處理!
但我圍繞着try-catch-clause中的Task.Run調用!在Worker
對象中產生的異常應該拋出或不拋出? 問題是什麼?
'OperationHandledException'?你確定?我從來沒有聽說過這樣的事情。 –
我的意思是OperationCanceledException :-) – rubiktubik
'我在Visual Studio中遇到了OperationCanceledException未處理的錯誤!'只需點擊'F5'並忽略它。當你在VS之外運行它時你不會得到它。順便說一句:你不能像你的代碼那樣捕獲任務的異常。您創建一個任務並退出try塊。 「ContinueWith」可能對此有所幫助。 –