运行 一个异步函数,无需等待 c# webforms 中的响应(即发即忘)
Run a async function without waiting for the response in c# webforms (fire and forget)
我有一个按钮可以发出创建文档的 REST 请求:
private void Click(object sender, ActionBaseEventArgs e)
{
RequestQuotationDocument(quotation.Oid).ConfigureAwait(false);
}
private async System.Threading.Tasks.Task RequestQuotationDocument(int quotationId)
{
HttpClient client = new HttpClient();
var values = new
{
DocumentType = "Quotation",
Id = quotationId.ToString()
};
var content = new StringContent(JsonConvert.SerializeObject(values), System.Text.Encoding.UTF8,
"application/json");
await client.PostAsync(url, content);
}
但是页面仍在等待 POST 请求的响应。我如何使它真正异步?
How do I make this truly async?
在ASP.NET,await
yields to the thread pool, not the client.
如果可能,我建议更换客户端,以便适当处理更长的请求;例如,通过 JavaScript 而不是点击处理程序调用它,并在完成时更新页面。
如果您确实需要 return 从 Web 请求中提早,那么您应该实施 basic distributed architecture。如我的博客所述,它由两部分组成:
- 持久的工作队列。
- 该队列的后端处理器。
我有一个按钮可以发出创建文档的 REST 请求:
private void Click(object sender, ActionBaseEventArgs e)
{
RequestQuotationDocument(quotation.Oid).ConfigureAwait(false);
}
private async System.Threading.Tasks.Task RequestQuotationDocument(int quotationId)
{
HttpClient client = new HttpClient();
var values = new
{
DocumentType = "Quotation",
Id = quotationId.ToString()
};
var content = new StringContent(JsonConvert.SerializeObject(values), System.Text.Encoding.UTF8,
"application/json");
await client.PostAsync(url, content);
}
但是页面仍在等待 POST 请求的响应。我如何使它真正异步?
How do I make this truly async?
在ASP.NET,await
yields to the thread pool, not the client.
如果可能,我建议更换客户端,以便适当处理更长的请求;例如,通过 JavaScript 而不是点击处理程序调用它,并在完成时更新页面。
如果您确实需要 return 从 Web 请求中提早,那么您应该实施 basic distributed architecture。如我的博客所述,它由两部分组成:
- 持久的工作队列。
- 该队列的后端处理器。