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

本文关键字:目标 框架 转换 方法 异步 任务 | 更新日期: 2023-09-27 17:55:47

我有使用异步Task<ActionResult>获取URL的SSO服务

它在我的本地环境中工作正常,但是当我实时发布时,出现以下错误:

'/XXXX 应用程序中的服务器错误。

当前应用程序不支持"异步无效"页面事件 配置。要启用此功能,请设置以下配置开关 在 Web.config 中: 有关详细信息,请参阅 http://go.microsoft.com/fwlink/?LinkId=252465。

我已经对此进行了研究,显然异步任务功能是为 4.0-4.5 .net 框架开发的。在以前的 .net 框架中有一些不同的模式或方法来执行此操作。

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

一等奖显然会推动安装.Net 4.5或至少.Net 4 .但是既然你问的是.Net 2,这可能不是一个选择。

如果对服务器块的调用直到完成,并且服务器上的工作是异步的,则可以使用 Thread 类委派不同线程中的工作。

以下是实现此目的的一些想法方法:

返回类型,无参数

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需要相互通信或等待的任何同步方案,则有可用于这些方案的同步基元类(来自filterdCode博客的图像)。

  • 手动重置事件苗条
  • 信号灯苗条
  • 倒计时事件
  • 障碍