我試圖提供兩個方法之一稱爲StartTask(action mymethod) 和另一個稱爲StopTask()的功能;取消沒有提供任務方法的任務與CancellationTokenSource
問題是操作必須有權訪問CancellationTokenSource以檢查取消並退出方法(返回),這實際上並不是我想要的方法可能在另一個組件或層中,我無法推送每個方法訪問該取消資源,
我不能推動具有處理方法的組件的設計者/開發人員檢查取消和返回。
有沒有什麼辦法可以有這樣的事情,我知道這聽起來很奇怪,不適用,只是想問問。
這是我得到的最好:
CancellationTokenSource cancellationTokenSource;
private void button1_Click(object sender, EventArgs e)
{
cancellationTokenSource = new CancellationTokenSource();
Task t = new Task(() => Dowork(CancellationAction), cancellationTokenSource.Token, TaskCreationOptions.LongRunning);
t.Start();
}
private bool CancellationAction()
{
if (cancellationTokenSource.IsCancellationRequested)
{
label1.Invoke(new MethodInvoker(() =>
{
label1.Text = "Cancellation Requested!";
}));
return true;
}
return false;
}
private void Dowork(Func<bool> Return)
{
int x = 1;
while (true)
{
x++;
label1.Invoke(new MethodInvoker(() =>
{
label1.Text = x.ToString();
}));
Thread.Sleep(1000);
if (Return())
{
return;
}
}
}
問題,這是現在的DoWork必須有一個參數是FUNC,但如果該方法已經採取其他的參數是什麼?創建任務將在另一個類中,可能不知道在旁邊傳遞哪些參數取消操作
由於'CancellationTokenSource'暗示的名稱,它意味着'CancellationToken'的* Source *,獲得了我訪問'Token'屬性的權限。通常,模式是將'CancellationToken'傳遞給依賴任務。這就是說,我無法弄清楚你最終的代碼示例是要達到什麼目的。 – 2011-06-01 13:32:29