我相当肯定在我的应用程序中创建了死锁,并且不确定如何解决此问题。我有一些移动部件,并且是新手async
和await
,请耐心等待。
我有一个客户端上传文件,如下所示:
public static async Task<string> UploadToService(HttpPostedFile file, string authCode, int id)
{
var memoryStream = new MemoryStream();
file.InputStream.CopyTo(memoryStream);
var requestContent = new MultipartFormDataContent();
var fileContent = new ByteArrayContent(memoryStream.ToArray());
fileContent.Headers.ContentType = MediaTypeHeaderValue.Parse(file.ContentType);
requestContent.Add(fileContent, "file", file.FileName);
using (var httpClient = new HttpClient())
{
httpClient.BaseAddress = new Uri(BaseUrl);
httpClient.DefaultRequestHeaders.Accept.Clear();
var message =
await
httpClient.PostAsync(
string.Format("Upload?authCode={0}&id={1}", authCode, id),
requestContent);
return await message.Content.ReadAsStringAsync();
}
}
接收文件的部分:
[HttpPost]
public Task<HttpResponseMessage> Upload(string authCode, int id)
{
var request = Request;
var provider = new CustomMultipartFormDataStreamProvider(root);
var task =
request.Content.ReadAsMultipartAsync(provider)
.ContinueWith(o =>
{
// ...
// Save file
// ...
return new HttpResponseMessage()
{
Content = new StringContent("File uploaded successfully"),
StatusCode = HttpStatusCode.OK
};
});
return task;
}
这一切都始于以下内容:
protected void Page_Load(object sender, EventArgs e)
{
if (IsPostBack)
{
var file = HttpContext.Current.Request.Files[0];
var response = UploadToService(file, hiddenAuthCode.Value, int.Parse(hiddenId.Value));
}
}
除了
PostAsync
没有识别到返回的 task
,一切似乎都正常。我可以看到 await ... PostAsync ...
任务的状态是 WaitingForActivation,但我不太确定这是什么意思(请记住,我对这些东西还很陌生)。我的文件保存在正确的位置,但应用程序从未识别出来来自我的服务的响应。如果有人能指点我方向,将不胜感激。
RegisterAsyncTask
后,我收到了参数类型System.Threading.Task.Task<string>无法分配给参数类型System.Web.UI.PageAsyncTask
的错误。我尝试更改返回类型,但这会导致其他错误。有什么想法吗? - Joenew PageAsyncTask(() => UploadToService(file, ...))
,参数是一个Func<Task>
。 - noseratio - open to work