这是我现在写的代码,我想知道它是否真的并行运行。 这是我的mvc代码中控制器的一部分。
namespace NewsReader.Controllers
{
public class TestController : Controller
{
public async Task<ActionResult> Index()
{
using (var db = new ApplicationDbContext())
{
var categoryList = db.Categories.Select(item => item.Name).ToList();
var khabaronline = KhabarOnlineTask(categoryList);
var isna = IsnaTask(categoryList);
await Task.WhenAll(khabaronline, isna);
var newsList = new List<NewsDetail>();
newsList.AddRange(khabaronline.Result);
newsList.AddRange(isna.Result);
return View(newsList);
}
}
public Task<List<NewsDetail>> KhabarOnlineTask(List<string> categoryList)
{
var ac = new AgenciesClass();
return Task.Run(() => ac.KhabarOnline(categoryList));
}
答案 0 :(得分:1)
假设两个任务看起来类似,代码确实会尝试并行运行,因为同步启动Task.Run(()...
的2个任务。由于实现/显式同步中的错误,它们可能最终会相互序列化,但至少start会并行。
await Task.WhenAll
将保证代码仅在两个任务完成后继续。
注意:始终使用async
/ await
或只是较低级别的Run / ContinueWith的代码会更容易阅读/推理,但混合你的方式也很好。
答案 1 :(得分:0)
您正在询问并行编程但显示异步方法。尽管它们在想法上相似但它们有几个不同之处。如果您尝试并行运行代码,请查看TPL(任务并行库)。否则就像在你的例子中一样,你的代码将异步运行,并且只会在需要时生成一个新线程。
List<string> collection = GetSomeCollection();
Parallel.ForEach(collection, item =>
{
//run in parallel
});