Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc 从非异步mvc控制器调用async方法并返回一个变量 公共异步任务GetReportDataColumnSettings(AdminTechnicianReportInput) { input.CustomerId=m_CustomerId; input.UserId=m_UserId; input.TimeOffset=m_TimeOffset; TReportReturn objTReportReturn=新的TReportReturn(); objTReportReturn.ReportColumns=等待新的ReportsEntityContext().GetTechniciansReportColumns(输入); objTReportReturn.ReportSettings=等待新的ReportsEntityContext().GetGeneralSettingsData(输入); objTReportReturn.ReportData=等待新的ReportsDbContext().GetUserListDynamic(输入); 返回objTReportReturn; } 公共类HomeController:控制器 { 公共行动结果索引() { AdminTechnicianReportInput objInput=新的AdminTechnicianReportInput(); objInput.CustomerId=1; objInput.UserId=5477; objInput.AddUpdateUserid=0; objInput.intRowsPerPage=200; objInput.intPageIndex=0; objInput.intTarget=0; objInput.intStatusId=0; objInput.strSearchQuery=“”; objInput.strSortColumn=“Id”; objInput.strortdirection=“ASC”; var result=new ReportsModel(15477,0).Administration.AdminTechnicianReport.GetReportDataColumnSettings(objInput.result); ViewBag.Title=result.ReportSettings.CustomerName+“\uuuuu”+result.ReportSettings.PrintedOn; 返回视图(); }_Asp.net Mvc_Asynchronous_Methods_Controller_Call - Fatal编程技术网

Asp.net mvc 从非异步mvc控制器调用async方法并返回一个变量 公共异步任务GetReportDataColumnSettings(AdminTechnicianReportInput) { input.CustomerId=m_CustomerId; input.UserId=m_UserId; input.TimeOffset=m_TimeOffset; TReportReturn objTReportReturn=新的TReportReturn(); objTReportReturn.ReportColumns=等待新的ReportsEntityContext().GetTechniciansReportColumns(输入); objTReportReturn.ReportSettings=等待新的ReportsEntityContext().GetGeneralSettingsData(输入); objTReportReturn.ReportData=等待新的ReportsDbContext().GetUserListDynamic(输入); 返回objTReportReturn; } 公共类HomeController:控制器 { 公共行动结果索引() { AdminTechnicianReportInput objInput=新的AdminTechnicianReportInput(); objInput.CustomerId=1; objInput.UserId=5477; objInput.AddUpdateUserid=0; objInput.intRowsPerPage=200; objInput.intPageIndex=0; objInput.intTarget=0; objInput.intStatusId=0; objInput.strSearchQuery=“”; objInput.strSortColumn=“Id”; objInput.strortdirection=“ASC”; var result=new ReportsModel(15477,0).Administration.AdminTechnicianReport.GetReportDataColumnSettings(objInput.result); ViewBag.Title=result.ReportSettings.CustomerName+“\uuuuu”+result.ReportSettings.PrintedOn; 返回视图(); }

Asp.net mvc 从非异步mvc控制器调用async方法并返回一个变量 公共异步任务GetReportDataColumnSettings(AdminTechnicianReportInput) { input.CustomerId=m_CustomerId; input.UserId=m_UserId; input.TimeOffset=m_TimeOffset; TReportReturn objTReportReturn=新的TReportReturn(); objTReportReturn.ReportColumns=等待新的ReportsEntityContext().GetTechniciansReportColumns(输入); objTReportReturn.ReportSettings=等待新的ReportsEntityContext().GetGeneralSettingsData(输入); objTReportReturn.ReportData=等待新的ReportsDbContext().GetUserListDynamic(输入); 返回objTReportReturn; } 公共类HomeController:控制器 { 公共行动结果索引() { AdminTechnicianReportInput objInput=新的AdminTechnicianReportInput(); objInput.CustomerId=1; objInput.UserId=5477; objInput.AddUpdateUserid=0; objInput.intRowsPerPage=200; objInput.intPageIndex=0; objInput.intTarget=0; objInput.intStatusId=0; objInput.strSearchQuery=“”; objInput.strSortColumn=“Id”; objInput.strortdirection=“ASC”; var result=new ReportsModel(15477,0).Administration.AdminTechnicianReport.GetReportDataColumnSettings(objInput.result); ViewBag.Title=result.ReportSettings.CustomerName+“\uuuuu”+result.ReportSettings.PrintedOn; 返回视图(); },asp.net-mvc,asynchronous,methods,controller,call,Asp.net Mvc,Asynchronous,Methods,Controller,Call,} GetReportDataColumnSettings函数调用许多异步方法,这些方法是模型库dll的基础 HomeController中的Index()方法是一个mvc方法,我想在结果变量中获取返回值。我尝试了getawaiter().getmethod(),但它不起作用。我不喜欢将Index()方法更改为asynk任务。请建议另一种获得结果的方法 我不喜欢将Index()方法更改为asynk任务 为什么不呢?这是迄今为止最简单、最正确的解决方案 第二个最简单的方法是使所有内容同步。也就是说

}

GetReportDataColumnSettings函数调用许多异步方法,这些方法是模型库dll的基础

HomeController中的Index()方法是一个mvc方法,我想在结果变量中获取返回值。我尝试了getawaiter().getmethod(),但它不起作用。

我不喜欢将Index()方法更改为asynk任务。请建议另一种获得结果的方法

我不喜欢将Index()方法更改为asynk任务

为什么不呢?这是迄今为止最简单、最正确的解决方案

第二个最简单的方法是使所有内容同步。也就是说,如果你不去,那就一直同步

从同步代码中调用异步有各种各样的方法,在您的情况下可能有效,也可能无效;这些黑客没有一个在任何地方都能奏效。有关更多详细信息,请参阅我的

在您的情况下,您最初的尝试是使用阻塞黑客。为了在预核心ASP.NET上正常工作,您必须对整个方法调用树中的每个
wait
使用
ConfigureAwait(false)
。这通常是可能的(当然,并非总是可能的,因为库代码可能会使用它,也可能不会使用它),但它会导致维护问题(忘记一个,您会遇到一个可能以死锁结束的竞争条件)。我在我的博客上详细解释

如果不能一直异步,如果不能一直同步,那么我建议使用布尔同步参数Hack,它要求整个调用堆栈同时支持同步调用方和异步调用方。对于您发布的代码,它看起来像这样:

   public async Task<Utils.TReportReturn> GetReportDataColumnSettings(AdminTechnicianReportInput input)
    {
        input.CustomerId = m_customerId;
        input.UserId = m_userId;
        input.TimeOffset = m_timeOffset;
        TReportReturn objTReportReturn = new TReportReturn();
        objTReportReturn.ReportColumns = await new ReportsEntityContext().GetTechniciansReportColumns<AdminTechnicianReportInput>(input);
        objTReportReturn.ReportSettings = await new ReportsEntityContext().GetGeneralSettingsData<AdminTechnicianReportInput>(input);
        objTReportReturn.ReportData = await new ReportsDbContext().GetUserListDynamic<AdminTechnicianReportInput>(input);
        return objTReportReturn;
    }

public class HomeController : Controller
{
    public ActionResult Index()
    {
        AdminTechnicianReportInput objInput = new AdminTechnicianReportInput();
        objInput.CustomerId = 1;
        objInput.UserId = 5477;
        objInput.AddUpdateUserid = 0;
        objInput.intRowsPerPage = 200;
        objInput.intPageIndex = 0;
        objInput.intTarget = 0;
        objInput.intStatusId = 0;
        objInput.strSearchQuery = "";
        objInput.strSortColumn = "Id";
        objInput.strSortDirection = "ASC";


        var result = new ReportsModel(1, 5477, 0).Administration.AdminTechnicianReport.GetReportDataColumnSettings(objInput).Result;

        ViewBag.Title = result.ReportSettings.CustomerName + "__" + result.ReportSettings.PrintedOn;           

        return View();
    }
专用异步任务DoGetReportDataColumnSettingsAsync(AdminTechnician报告输入,布尔同步)
{
input.CustomerId=m_CustomerId;
input.UserId=m_UserId;
input.TimeOffset=m_TimeOffset;
TReportReturn objTReportReturn=新的TReportReturn();
objTReportReturn.ReportColumns=等待新的ReportsEntityContext().GetTechniciansReportColumns(输入,同步);
objTReportReturn.ReportSettings=等待新的ReportsEntityContext().GetGeneralSettingsData(输入,同步);
objTReportReturn.ReportData=等待新的ReportsDbContext().GetUserListDynamic(输入,同步);
返回objTReportReturn;
}
私有任务GetReportDataColumnSettingsAsync(AdminTechnicianReportInput)
{return DoGetReportDataColumnSettingsAsync(输入,同步:false);}
private Utils.TReportReturn GetReportDataColumnSettings(AdminTechnicianReportInput)
{return DoGetReportDataColumnSettingsAsync(输入,同步:true).GetAwaiter().GetResult();}
此模式的关键在于,当参数设置为
true
时,任何采用
sync
参数的方法都必须返回已完成的任务

我不喜欢将Index()方法更改为asynk任务

为什么不呢?这是迄今为止最简单、最正确的解决方案

第二个最简单的方法是使所有内容同步。也就是说,如果你不去,那就一直同步

从同步代码中调用异步有各种各样的方法,在您的情况下可能有效,也可能无效;这些黑客没有一个在任何地方都能奏效。有关更多详细信息,请参阅我的

在您的情况下,您最初的尝试是使用阻塞黑客。为了在预核心ASP.NET上正常工作,您必须对整个方法调用树中的每个
wait
使用
ConfigureAwait(false)
。这通常是可能的(当然,并非总是可能的,因为库代码可能会使用它,也可能不会使用它),但它会导致维护问题(忘记一个,您会遇到一个可能以死锁结束的竞争条件)。我在我的博客上详细解释

如果不能一直异步,如果不能一直同步,那么我建议使用布尔同步参数Hack,它要求整个调用堆栈同时支持同步调用方和异步调用方。对于您发布的代码,它看起来像这样:

   public async Task<Utils.TReportReturn> GetReportDataColumnSettings(AdminTechnicianReportInput input)
    {
        input.CustomerId = m_customerId;
        input.UserId = m_userId;
        input.TimeOffset = m_timeOffset;
        TReportReturn objTReportReturn = new TReportReturn();
        objTReportReturn.ReportColumns = await new ReportsEntityContext().GetTechniciansReportColumns<AdminTechnicianReportInput>(input);
        objTReportReturn.ReportSettings = await new ReportsEntityContext().GetGeneralSettingsData<AdminTechnicianReportInput>(input);
        objTReportReturn.ReportData = await new ReportsDbContext().GetUserListDynamic<AdminTechnicianReportInput>(input);
        return objTReportReturn;
    }

public class HomeController : Controller
{
    public ActionResult Index()
    {
        AdminTechnicianReportInput objInput = new AdminTechnicianReportInput();
        objInput.CustomerId = 1;
        objInput.UserId = 5477;
        objInput.AddUpdateUserid = 0;
        objInput.intRowsPerPage = 200;
        objInput.intPageIndex = 0;
        objInput.intTarget = 0;
        objInput.intStatusId = 0;
        objInput.strSearchQuery = "";
        objInput.strSortColumn = "Id";
        objInput.strSortDirection = "ASC";


        var result = new ReportsModel(1, 5477, 0).Administration.AdminTechnicianReport.GetReportDataColumnSettings(objInput).Result;

        ViewBag.Title = result.ReportSettings.CustomerName + "__" + result.ReportSettings.PrintedOn;           

        return View();
    }
专用异步任务DoGetReportDataColumnSettingsAsync(AdminTechnician报告输入,布尔同步)
{
input.CustomerId=m_CustomerId;
input.UserId=m_UserId;
input.TimeOffset=m_TimeOffset;
TReportReturn objTReportReturn=新的TReportReturn();
objTReportReturn.ReportColumns=等待新的ReportsEntityContext().GetTechniciansReportColumns(输入,同步);
objTReportReturn.ReportSettings=等待新的ReportsEntityContext().GetGeneralSettingsData(输入,同步);
objTReportReturn.ReportData=等待新的ReportsDbContext().GetUserL