【发布时间】:2016-05-23 19:46:13
【问题描述】:
public async Task<ActionResult> Search(string q)
{
var data = db.MediaPlanBilingInvoices.Where(m => m.IsDeleted == false);
//allthe stuff
decimal? allinvoicetotal=0;
decimal? allrototal = 0;
if (Noofrecords > 0)
{
if (WebConstants.PrintMedia)
{
var roobject = data.Where(x => x.isPrint == true).SelectMany(m => m.MediaPlanBilingInvoiceDetails);
var roobjects =roobject.Select(m=>m.RoId);
Func<decimal?> functions = new Func<decimal?>(() => roobject.Sum(m => m.MediaPlanRO.MediaPlanROPrints.Sum(qq => qq.MediaPlanPrint.Amount)));
var tasksro = await System.Threading.Tasks.Task.Factory.StartNew<decimal?>(functions);
allrototal = allrototal + tasksro.Result;
}
else if (WebConstants.ElectronicMedia)
{
var roobject = data.Where(x => x.iselectronic == true).SelectMany(m => m.MediaPlanBilingInvoiceDetails);
var roobjects =roobject.Select(m=>m.RoId);
Func<decimal?> functions = new Func<decimal?>(() => roobject.Sum(m => m.MediaPlanRO.MediaPlanROPrints.Sum(qq => qq.MediaPlanPrint.Amount)));
var tasksro = await System.Threading.Tasks.Task.Factory.StartNew<decimal?>functions);
allrototal = allrototal + tasksro ;
}
}
}
return Viewdata);
}
}
我正在尝试针对不同标准计算不同表中 ros 的总和。
问题在于,当程序到达 allrottotal 时,它会停止并且不会转到下一行,直到它降低结果为止。我想让它继续运行而不是停在那里。我该怎么做?
【问题讨论】:
-
这就是 async/await 的作用。它使线程非阻塞,以便其他请求可以使用它。
-
这就是 async/await 的工作原理,在结果可用之前你不能使用它。
-
一旦 pgogram 找到 startnew 就会开始在后台执行查询?
-
@maz3tt 要记住的重要一点:异步不一定会减少加载时间(尤其是在无法执行并行任务的情况下),但它优化了线程的使用(即它允许线程用于其他事情在长期运行期间)。
-
你读过StartNew is Dangerous的文章了吗?
标签: c# asp.net-mvc async-await task-parallel-library