首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >"UseTaskFriendlySynchronizationContext“是什么意思?

"UseTaskFriendlySynchronizationContext“是什么意思?
EN

Stack Overflow用户
提问于 2012-03-05 15:06:13
回答 2查看 41.7K关注 0票数 68

asp.net 4.5中有一个新的应用程序设置

代码语言:javascript
复制
<add key="aspnet:UseTaskFriendlySynchronizationContext" value="true" />

这样的代码可以在asp.net 4.0中运行

代码语言:javascript
复制
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());
}

但它在asp.net 4.5中不起作用,当我删除新的应用程序设置时,它又能工作了!

那么"UseTaskFriendlySynchronizationContext“是什么意思呢?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-03-12 13:07:35

关于UseTaskFriendlySynchronizationContext,来自Microsoft Forums

告诉ASP.NET使用一个全新的异步管道,该管道遵循CLR约定启动异步操作,包括在必要时将线程返回到ThreadPool。CLR4.0和更低版本遵循了自己的约定,这与ASP.NET指导方针背道而驰,如果没有启用开关,异步方法很容易同步运行,死锁请求,或者表现得不像预期的那样。

另外,我认为AsyncOperationManager是为桌面应用程序设计的。对于ASP.NET应用程序,您应该使用RegisterAsyncTask并设置<%@ Page Async="true"see here for more details

因此,使用新的c#关键字,您的示例将是:

代码语言:javascript
复制
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);
}

其目标是通过发布来支持以下功能,但目前在测试版中不支持:

代码语言:javascript
复制
protected async void Button1_Click(object sender, EventArgs e)
{
    var res = await new WebClient().DownloadStringTaskAsync("http://www.google.com");
    Response.Write(res);
}
票数 76
EN

Stack Overflow用户

发布于 2014-07-06 16:41:51

更多细节,引用自MSDN上的ASP.NET 4.5.1 documentation for appSettings

aspnet:UseTaskFriendlySynchronizationContext

指定ASP.NET 4.5中异步代码路径的行为方式。

..。

如果此键值设置为false default,则ASP.NET 4.5中异步代码路径的行为与ASP.NET 4.0中的行为相同。如果此键值设置为true,则ASP.NET 4.5将使用针对任务返回API进行优化的代码路径。对于启用WebSocket的应用程序、在网页窗体页中使用基于任务的异步以及某些其他异步行为,设置此兼容性开关是必需的。

票数 13
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9562836

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档