我有SSO服务使用异步Task<ActionResult>
来获取网址
它在我的本地环境中工作正常,但是当我在现场发布时,我得到以下错误:
&#39; / XXXX应用程序中的服务器错误。
&#34; async void&#34;当前应用程序不支持页面事件 组态。要启用此功能,请设置以下配置开关 在Web.config中: 有关更多信息,请参阅 http://go.microsoft.com/fwlink/?LinkId=252465
我已经研究过这个,显然Async Task功能是为4.0-4.5 .net框架开发的。在以前的.net框架中,有一些不同的模式或方法可以做到这一点。
答案 0 :(得分:2)
一等奖显然会推动安装.Net 4.5
或至少.Net 4
。但既然你问的是.Net 2
,这可能不是一个选择。
如果对服务器的调用阻塞直到完成并且服务器上的工作是异步的,则可以使用Thread
class委派不同线程中的工作。
以下是实现这一目标的一些想法:
没有退货类型,没有参数
var ts = new ThreadStart(DoWorkAsync);
new Thread(ts).Start();
...
public void DoWorkAsync()
{
// This happens on a different thread.
}
没有返回类型,带参数
int id = 1;
var pts = new ParameterizedThreadStart(DoWorkWithParamsAsync);
new Thread(pts).Start(id);
...
public void DoWorkWithParamsAsync(object obj)
{
// This happens on a different thread.
int id = (int)obj;
}
使用返回类型(IAsyncResult)
您可以使用BeginInvoke
方法,然后使用返回类型的特定delegate
签名:
Func<int> returnsIntDel = DoWorkReturnIntAsync;
var asyncRes = returnsIntDel.BeginInvoke(null, null);
//... some other work on main thread here...
int returnedInt = returnsIntDel.EndInvoke(asyncRes);
Console.WriteLine("Done");
...
public int DoWorkReturnIntAsync()
{
// This happens on a different thread.
return 0;
}
线程之间的同步
如果您遇到Thread
需要通信或等待彼此的任何同步方案,则可以使用 Synchronization Primitive 类来处理这些方案(来自filterdCode的图像博客)。