同时执行方法

时间:2018-12-03 10:25:45

标签: c# task

可能很奇怪的请求,但是我试图同时模拟一个方法调用,最终目的是我不在乎哪个方法调用首先到达它...方法本身是同步的(现在),因此我知道并接受它将阻塞,我根本不在乎哪个请求首先到达那里。

这更多是一种思想练习,所以如果我做这样的事情,它是否在做我认为正在做的事情?即在不同的线程上运行方法调用?

Task<MyObject> t1 = Task.Run(() => MethodToRun("param1"));
Task<MyObject> t2 = Task.Run(() => MethodToRun("param2"));

await Task.WhenAll(t1, t2); // block, and wait for results, i think?

var r1 = t1.Result;
var r2 = t2.Result;

或者,这是否总是总是首先执行t1

我考虑过将任务添加到列表中,然后将它们全部启动。

var taskList = new List<Task<MyObject>>
{
    new Task<MyObject>(() => MethodToRun("param1"));
    new Task<MyObject>(() => MethodToRun("param2"));
};

Parallel.ForEach(taskList, t => t.Start());

await Task.WhenAll(taskList);

var r1 = taskList[0].Result;
var r2 = taskList[1].Result;

实际上有什么不同吗?

0 个答案:

没有答案