我有两个相互独立的静态函数,当它们单独使用时会占用大量资源。
public static class Helper(){
public static void A(string username, int power, Model model)
{ /* do A things to the model */ }
public static void B(string username, Model model)
{ /* do B things to the model */ }
}
现在,他们被称为
public ActionResult Home(){
Model model = new Model();
A("Jared", 9001, model);
B("Jared", model);
return View("Home", model);
}
在我的控制器中(attn:不是真正的代码)。
我希望它们能够异步并行工作,然后当它们完成时,我想返回同步处理,以便使用更新的模型返回View。
有没有办法实现这个目标?我以前从未使用异步C#或C#,所以我很难破译我发现的例子。
TIA
答案 0 :(得分:4)
我假设你的意思是,并行异步。
首先更新您的函数以匹配以下内容:
public static async Task A(Model model) { /* ... */ }
public static async Task B(Model model) { /* ... */ }
然后更新您的调用代码,看起来像这样:
public async Task<ActionResult> Home() {
var taskA = A(model);
var taskB = B(model);
await Task.WhenAll(taskA, taskB);
return View("Home", model);
}
答案 1 :(得分:2)
这应该可以解决问题..
public async Task<ActionResult> Home()
{
var model = new Model();
var t1 = Helper.A("Jared", 9001, model);
var t2 = Helper.B("Jared", model);
await Task.WhenAll(new [] { t1, t2 });
return View("Home", model);
}
public static class Helper
{
public static async Task A(string username, int power, Model model)
{
/* do A things to the model */
}
public static async Task B(string username, Model model)
{
/* do B things to the model */
}
}
虽然有一个很大的“陷阱”。该模型必须能够同时处理A()
和B()
。
答案 2 :(得分:-2)