Doz*_*zer 64 asp.net asynchronous
asp.net 4.5中有一个新的应用程序设置
<add key="aspnet:UseTaskFriendlySynchronizationContext" value="true" />
Run Code Online (Sandbox Code Playgroud)
像这样的代码可以在asp.net 4.0中运行
protected void Button1_Click(object sender, EventArgs e)
{
CallAysnc();
}
public void CallAysnc()
{
AsyncOperation asyncOp = AsyncOperationManager.CreateOperation(Guid.NewGuid().ToString());
WebClient client = new WebClient();
client.DownloadStringCompleted += (object sender, DownloadStringCompletedEventArgs e) =>
{
asyncOp.PostOperationCompleted(CallCompleted, e.Result);
};
client.DownloadStringAsync(new Uri("http://www.google.com"));
}
private void CallCompleted(object args)
{
Response.Write(args.ToString());
}
Run Code Online (Sandbox Code Playgroud)
但它在asp.net 4.5中不起作用,当我删除新的appsetting时,它再次起作用!
那么"UseTaskFriendlySynchronizationContext"的含义是什么?
Mic*_*ael 71
关于UseTaskFriendlySynchronizationContext,来自Microsoft论坛:
这告诉ASP.NET使用一个全新的异步管道,该管道遵循CLR约定来启动异步操作,包括在必要时将线程返回到ThreadPool.ASP.NET 4.0及更低版本遵循其自身的惯例,这些约定违反了CLR指南,如果未启用该开关,则 异步方法非常容易同步运行,请求死锁,或者不按预期运行.
此外,我认为AsyncOperationManager是用于桌面应用程序.对于您应该使用RegisterAsyncTask和设置的ASP.NET应用程序<%@ Page Async="true",请参阅此处了解更多详细信息.
因此,使用新的c#关键字,您的示例将是:
protected void Button1_Click(object sender, EventArgs e)
{
RegisterAsyncTask(new PageAsyncTask(CallAysnc));
}
private async Task CallAysnc()
{
var res = await new WebClient().DownloadStringTaskAsync("http://www.google.com");
Response.Write(res);
}
Run Code Online (Sandbox Code Playgroud)
目的是通过发布支持以下内容,但目前不支持测试版:
protected async void Button1_Click(object sender, EventArgs e)
{
var res = await new WebClient().DownloadStringTaskAsync("http://www.google.com");
Response.Write(res);
}
Run Code Online (Sandbox Code Playgroud)
uri*_*rig 11
更多细节,引自MSDN上appSettings的 ASP.NET 4.5.1 文档:
ASPNET:UseTaskFriendlySynchronizationContext
指定ASP.NET 4.5中的异步代码路径的行为方式.
...
如果此键值设置为false [default],则ASP.NET 4.5中的异步代码路径的行为与在ASP.NET 4.0中的行为相同.如果此键值设置为true,则ASP.NET 4.5使用针对任务返回API优化的代码路径.对于启用WebSockets的应用程序,在Web窗体页中使用基于任务的异步以及某些其他异步行为,必须设置此兼容性开关.
| 归档时间: |
|
| 查看次数: |
34889 次 |
| 最近记录: |