任务的执行与 C# 中的 Task.WaitAll 挂起
本文关键字:Task WaitAll 挂起 中的 执行 任务 | 更新日期: 2023-09-27 18:35:18
>我有一个像下面这样的类
public class ImageUploader
{
....
public Task<string> Upload()
{
return new Task<string>(
() =>
{
....
return UploadedFilePath;
}
);
}
....
}
然后我像这样使用它
var uploadIcon = new ImageUploader();
var uploadLogo = new ImageUploader();
var uploadIconTask = uploadIcon.Upload();
var uploadLogoTask = uploadLogo.Upload();
Task.WaitAll(uploadIconTask, uploadLogoTask); // never returns
和任务等待所有永远挂起!
问题出在哪里?!
它挂起是因为您从未启动任务。所以WaitAll
在等待他们完成,他们永远不会完成,因为他们从未开始过。
如果您查看 Task.WaitAll 的 doco,您将看到 StartNew() 用于创建的任务 - 这既创建又启动任务。
这应该有效:
public class ImageUploader
{
....
public Task<string> Upload()
{
return Task.Run(() =>
{
....
return UploadedFilePath;
});
}
....
}