我是第三方物流新手,在理解.continueWith方面需要一些帮助。请你告诉我第一项任务--继续执行--有什么问题吗?第二项如何正确?
List<int> input = new List<int> { 1, 2, 3, 4, 5 };
//Gives cast error at the second continuation: cannot implicitly convert
//Task to Task<List<int>>
Task<List<int>> task = Task.Factory.StartNew<List<int>>(
(state) => { return (List<int>)state; }, input)
.ContinueWith<List<int>>(
(prevTask => { return (List<int>)prevTask.Result; }))
.ContinueWith(
(prevTask => { Console.WriteLine("All completed"); }));
//Works fine
Task<List<int>> task1 = Task.Factory.StartNew<List<int>>(
(state) => { return (List<int>)state; }, input);
task1.ContinueWith<List<int>>(
(prevTask => { return (List<int>)prevTask.Result; }))
.ContinueWith(
(prevTask => { Console.WriteLine("All completed"); }));发布于 2014-08-10 16:41:19
使用ContinueWith()完成的第一个方法调用链,它返回一个不能分配给Task<List<int>>的Task对象
Task.Factory.StartNew<List<int>>(...) // returns Task<List<int>>
.ContinueWith<List<int>>(...) // returns Task<List<int>>
.ContinueWith(...); // returns Task但是在第二种情况下,最后一个ContinueWith的结果没有被分配给任何东西,所以工作得很好。
对于第一个工作,要么将task定义为Task
Task task = Task.Factory.StartNew<List<int>>(
(state) => { return (List<int>)state; }, input)
.ContinueWith<List<int>>(
(prevTask => { return (List<int>)prevTask.Result; }))
.ContinueWith(
(prevTask => { Console.WriteLine("All completed"); }));或者让最后一个调用成为通用调用:
Task<List<int>> task = Task.Factory.StartNew<List<int>>(
(state) => { return (List<int>)state; }, input)
.ContinueWith<List<int>>(
(prevTask => { return (List<int>)prevTask.Result; }))
.ContinueWith<List<int>>(
(prevTask => { Console.WriteLine("All completed"); }));https://stackoverflow.com/questions/25230728
复制相似问题