代码之家  ›  专栏  ›  技术社区  ›  m1nkeh

并发执行方法

  •  1
  • m1nkeh  · 技术社区  · 6 年前

    模拟 一个方法调用并发的最终目标是我不在乎哪个方法调用首先到达它。。。方法本身是同步的(目前),因此我知道并接受它将被阻塞,我根本不在乎哪个请求首先使它到达那里。。

    这更像是一个思维练习,所以如果我做了这样的事情,它是在做我认为它在做的事情吗?i、 在不同的线程上运行方法调用?

    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 回复  |  直到 6 年前