【发布时间】:2014-03-04 16:46:32
【问题描述】:
我在另一个thread 中询问了一个关于 TPL 中 GDI+ 问题(异步/等待)的问题,讨论转向了使用 TPL 是否有任何好处的问题。
所以我想在这里理解这个问题的答案。
场景大致是这样的:
- Web API 控制器/方法接收图像上传
- 调整图像大小并将其上传到 azure 的方法针对各种尺寸被多次调用 (
- 该方法为每个调整大小和上传的图像返回一个 Uri
- 向 Web API 客户端返回响应
请注意,这可能会在单核机器上运行,因此并行运行所有调整大小不会带来任何好处(例如,缩短请求的总长度)。
但我的印象是,将所有各种调整大小包装到一个方法中并异步运行该方法将至少将 Web API 线程暂时返回到池中,以处理另一个请求(同时一个常规线程运行调整大小的任务),这是一件好事。代码如下所示:
public Dictionary<ProfilePhotoSize, Uri> ProcessImages(Stream photoStream)
{
var imgUris = new Dictionary<ProfilePhotoSize, Uri>()
{
ProfilePhotoSize.FiveHundredFixedWidth, ResizeAndUpload(ProfilePhotoSize.FiveHundredFixedWidth, photoStream)},
ProfilePhotoSize.Square220, ResizeAndUpload(ProfilePhotoSize.Square220, photoStream)},
ProfilePhotoSize.Square140, ResizeAndUpload(ProfilePhotoSize.Square140, photoStream)},
ProfilePhotoSize.Square80, ResizeAndUpload(ProfilePhotoSize.Square80, photoStream)},
ProfilePhotoSize.Square50, ResizeAndUpload(ProfilePhotoSize.Square50, photoStream)}
};
return imgUris;
}
还有……
var photoUris = await Task.Run(() => _photoService.ProcessImages(photoStream);
所以问题是 - 我是否偏离了基地?也许这个理论是合理的,但它实现得并不完全正确(也许我需要使用 ConfigureAwait)?
这里的现实是什么?
【问题讨论】:
-
看看这里tugberkugurlu.com/archive/… 另外,为什么不使用 Azure WebJobs 来调整图像大小并上传到 Azure 存储?
-
@MatijaGrcic 阅读您的链接,似乎支持我的理解 - 是吗?至于 Azure WebJobs,我们可能会离开 Azure,但如果我们不这样做,我会看看它......
标签: c# azure task-parallel-library asp.net-web-api