除了要求TaskFactory.StartNew僅與「動作」參數的最常見的形式 (1)https://msdn.microsoft.com/en-us/library/dd321439(v=vs.110).aspx爲什麼要將取消令牌傳遞給TaskFactory.StartNew?
我們ALSE有一個接受一個額外的參數爲「對消令牌」 (2)https://msdn.microsoft.com/en-us/library/dd988458.aspx
一個方法我的問題是,爲什麼我們應該使用call(2)而不是call(1)?
我的意思是,對於頁面中的MSDN的例子(2)將也,如果我沒有通過取消標記爲參數(因爲變量令牌是由委託函數訪問的工作是這樣:
var tokenSource = new CancellationTokenSource();
var token = tokenSource.Token;
var files = new List<Tuple<string, string, long, DateTime>>();
var t = Task.Factory.StartNew(() => { string dir = "C:\\Windows\\System32\\";
object obj = new Object();
if (Directory.Exists(dir)) {
Parallel.ForEach(Directory.GetFiles(dir),
f => {
if (token.IsCancellationRequested)
token.ThrowIfCancellationRequested();
var fi = new FileInfo(f);
lock(obj) {
files.Add(Tuple.Create(fi.Name, fi.DirectoryName, fi.Length, fi.LastWriteTimeUtc));
}
});
}
}
); //note that I removed the ", token" from here
tokenSource.Cancel();
所以有什麼情況發生底下當我通過取消標記以Task.Factory.StartNew?
感謝
感謝您傳播有關不使用'Task.Factory' – kai