当我运行此代码时,我得到一个我不理解的异常:"可能不会在继续任务上调用start".请告诉我我做错了什么.
List<Task> TasksList = new List<Task>();
for (int i = 0; i < ThreadsNumber; i++)
{
int local = i;
var task = new Task<List<string>>(() => PrimeTask(Ratio * local, (local + 1) * Ratio))
.ContinueWith((t) => UpdatePrimesList(t.Result));
TasksList.Add(task);
TasksList[i].Start();
}
Task.WaitAny(TasksList.ToArray());
Run Code Online (Sandbox Code Playgroud)
这里的问题是,这task并不是指您正在创建的第一个任务,而是指您创建的任务ContinueWith.
IE浏览器.这种结构:
var task = new Task<..>(...).ContinueWith(...);
Run Code Online (Sandbox Code Playgroud)
将引用ContinueWith返回的任务.您不再具有对第一个任务的引用.
它与此基本相同:
var task = new SomeObject().SomeMethodReturningAnotherObject();
Run Code Online (Sandbox Code Playgroud)
在这里你不再有引用SomeObject,只是对方法SomeMethodReturningAnotherObject返回的引用.
而是这样做:
var task = new Task<..>(...);
task.ContinueWith(...);
TaskList.Add(task);
task.Start();
Run Code Online (Sandbox Code Playgroud)
这将正确启动第一个任务,而不是尝试启动延续任务,因为您的异常消息告诉您.
| 归档时间: |
|
| 查看次数: |
1128 次 |
| 最近记录: |