有在asp.net一个新的应用程序设置4.5“UseTaskFriendlySynchronizationContext”的含义是什么?
<add key="aspnet:UseTaskFriendlySynchronizationContext" value="true" />
这样的代码可以在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());
}
运行,但它不会在asp.net 4.5工作,当我删除新的appsetting,它再次工作!
那么“UseTaskFriendlySynchronizationContext”的含义是什么?
我使用了目标代码,它工作正常。如何知道它目前不支持?什么情况不支持? – Dozer 2012-03-12 08:16:43
@Dozer,我猜你没有UseTaskFriendlySynchronizationContext设置为true?我收到关于响应不可用的错误(易于解决,但如果您无法更改的控件编码为访问它,则不会)。如果您按照指向Microsoft论坛的链接,您可以阅读我遇到的几个问题以及Microsoft员工不支持的评论。我觉得它不会自动插入到RegisterAsyncTask,但由于问题(不知道是什么,但你可以在论坛上提问),如果没有,那么你将无法同步运行它。 – Michael 2012-03-12 10:24:42
MSDN中的答案说:“在你的具体例子中,如果没有设置开关,实际上有一个异步void方法,实际上在页面中引入了一个竞争条件,其中DataBind()方法不能保证在页面实际呈现之前被调用并将其输出发送给客户端“。但是我试过了,页面总是在DataBind()方法之后呈现。 –
Dozer
2012-03-13 09:47:42