WebAPI异步方法错误

时间:2016-04-13 11:10:30

标签: c# asp.net-web-api async-await task-parallel-library

正如您在下面的代码中看到的,当我尝试从数据层异步调用该方法时,我收到以下两个错误。

如何在不收到这些错误的情况下异步调用该方法?

  
      
  • 未定义System.Runtime.CompilerServices.IAsyncStateMachine或

  •   
  • 导入无法找到'async'修饰符所需的所有类型。是   您定位错误的框架版本,或缺少对引用   集会?

  •   

APIProject.DAL

public class Account : BaseLayer
{
    public static Result SignIn(string userName, string userPass)
    {
        var inputParameters = new Dictionary<string, object>();
        inputParameters.Add("IN_USERNAME", userName);
        inputParameters.Add("IN_USERPASS", userPass);
        var response = ListStoredProcedure(Procedure.SignIn, inputParameters);
        var resultSet = new List<User>();
        foreach (DataRow row in response.DataTable.Rows)
        {
            resultSet.Add(new User
            {
                UserId   = row.GetVarchar("USERID"),
                Fullname = row.GetVarchar("FULLNAME")
            });
        }
        return new Result
        {
            HasResult = response.HasResult,
            Message   = response.Message,
            ResultSet = resultSet
        };
    }
}

APIProject.WebAPI

using System.Threading.Tasks;
public class AccountController : ApiController
{
    public async Task<Result> SignIn(LogInModel model)
    {
        Result r = APIProject.DAL.Account.SignIn(model.UserName, model.UserPass);
        return await Task.Factory.StartNew<Result>(() => r);
    }
}

3 个答案:

答案 0 :(得分:2)

您需要将项目更新为.NET 4.5或更高版本, set httpRuntime.targetFramework in your web.config to the appropriate value

如果您跳过第二步,async / await编译,但可能无法正常使用。

答案 1 :(得分:1)

我认为您的代码的目标是旧的.NET Framework版本。您需要至少定位.NET 4.5。如果您不想重新定位项目,可以安装Microsoft.Bcl.Async NuGet包,它允许在旧版本的.NET中使用async\await

答案 2 :(得分:1)

您收到错误

  

未定义'System.Runtime.CompilerServices.IAsyncStateMachine'或   进口

当您定位错误的.NET框架版本时。要使异步开箱即用,您需要将应用程序定位到.NET 4.5(至少)