【发布时间】:2014-03-07 23:30:19
【问题描述】:
仅处理单个异步操作的正确方案是什么?例如,我需要导入大文件,在导入时我需要禁用该选项以确保不会触发第二次导入。
想到什么:
[HttpPost]
public async Task<HttpResponseMessage> ImportConfigurationData()
{
if (HttpContext.Current.Application["ImportConfigurationDataInProcess"] as bool? ?? false)
return Request.CreateErrorResponse(HttpStatusCode.InternalServerError, "Task still running");
HttpContext.Current.Application["ImportConfigurationDataInProcess"] = true;
string root = HttpContext.Current.Server.MapPath("~/App_Data");
var provider = new MultipartFormDataStreamProvider(root);
await Request.Content.ReadAsMultipartAsync(provider);
//actual import
HttpContext.Current.Application["ImportConfigurationDataInProcess"] = false;
Request.CreateResponse(HttpStatusCode.OK, true)
}
但这似乎是非常硬编码的解决方案。什么是正确的处理方法?
另一件事它在客户端无法正常工作,它仍在等待响应。那么用户是否有可能只是将该文件发送到服务器而不是等待未点亮它会完成但在文件发送到服务器后重新加载页面而无需等待await 的东西将完成。
【问题讨论】:
标签: c# asp.net asynchronous asp.net-web-api async-await