我有一個後臺工作人員,負責下載大量小文件並將其保存在硬盤上。爲了給你一個規模的想法,3000萬個文件。優雅地殺死一個耗時太長的方法
後臺工作者是可取消的,我可以取消就好了,一旦我開始下載文件。但是在調用外部dll方法時,我無法取消該方法,該方法告訴我要下載哪些文件。我有一個外部DLL與我調用的方法返回這個長長的文件列表。完成這種單一方法可能需要幾個小時。
我真的需要能夠取消這個電話。例如,用戶會因所花費的時間和點擊取消而感到沮喪。現在,我需要等到該方法完成後才能取消。
下面是一個例子:
void worker_DoWork(object sender, DoWorkEventArgs e)
{
TimeIntensiveMethod(); // Can take up to an hour - can't cancel it
for (int i = 0; i < 1000; i++)
{
if (worker.CancellationPending)
break;
ShortDurationMethod(); // The wait to complete before cancelling is unperceivable
}
}
在這個例子中,我希望能夠在TimeIntensiveMethod
取消,而它在工作的中間。這可能嗎?
一個非常好的例子,如何包裝這個任務,並殺死任務:http://msdn.microsoft .com/en-us/library/dd997396%28v = vs.110%29.aspx – Haney
@DavidHaney:如果我理解正確,對'TimeIntensiveMethod'的整體調用可以防止這種情況發生一個好方法,除非它可以被重寫以支持取消。 – spender
@spender你可能是對的。我們對「TimeIntensiveMethod」一無所知。 – Haney