我有一个类似下面的课程
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
和Task.WaitAll永远挂起!
有什么问题?!
答案 0 :(得分:8)
它因为你从未开始任务而挂起。因此WaitAll
等待他们完成,因为他们从未开始过,所以他们永远不会这样做。
如果您查看Task.WaitAll的doco,您会看到StartNew()用于创建的任务 - 这将创建并启动任务。
答案 1 :(得分:2)
这应该有效:
public class ImageUploader
{
....
public Task<string> Upload()
{
return Task.Run(() =>
{
....
return UploadedFilePath;
});
}
....
}