将异步任务方法目标框架4.5转换为TargetFramework 2.0

时间:2015-06-12 09:38:07

标签: c# .net asynchronous

我有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框架中,有一些不同的模式或方法可以做到这一点。

1 个答案:

答案 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的图像博客)。