解决方案 »

  1.   

    多线程可以传参啊
    3种传参方式
    1.封装到类里去
    2.object参数
    3.委托传参
      

  2.   

    如果你几个接口必须按顺序执行,那么你异步没戏
    比如你有三个接口:IA,IB,ICIB的参数用到了IA的返回结果,IC用到了IB的返回结果,这样你还怎么异步?
      

  3.   

    例如,你有两个方法 proc1和proc2需要调用,参数分别为x和y,返回值类型分别为ResultTypeA和string,那么可以这样进行线程同步var a = new ManualResetEvent(false);
    var b = new ManualResetEvent(false);
    ResuleTypeA result1 = null;
    string result2 = null;
    ThreadPool.QueueUserWorkItem(h =>
    {
        result1 = proc1(x);
        a.Set();
    });
    ThreadPool.QueueUserWorkItem(h =>
    {
        result2 = proc2(y);
        b.Set();
    });
    a.WaitOne();
    b.WaitOne();你自己去写其它形式的代码,例如 async/await 形式的代码,也是一样要写额外代码的(要另外声明两个 async proc1、async proc2 方法的)。
      

  4.   

    当然你也可以写ResuleTypeA result1 = null;
    string result2 = null;
    var a = new Thread(() =>
        {
            result1 = proc1(x);
        });
    var b = new Thread(() =>
    {
        result2 = proc2(y);
    });
    a.Start();
    b.Start();
    a.Join();
    b.Join();这些都是线程的基本操作方法。
      

  5.   

    要注意,所谓“异步调用”,跟线程没有多大区别,只不过是看所谓的“接口”是否提供相关方法而已。比如说假设proc1、proc2的重载形式都有一个异步回调参数,那么程序可以写var a = new ManualResetEvent(false);
    var b = new ManualResetEvent(false);
    ResultTypeA result1 = null;
    string result2 = null;
    proc1(x, r =>
    {
        result1 = r;
        a.Set();
    });
    proc2(y, r =>
    {
        result2 = r;
        b.Set();
    });
    a.WaitOne();
    b.WaitOne();异步调用方法,向我们隐藏了proc1和proc2内部是否是子线程调用远程功能的事实。假设proc1是在子线程中调用,而proc2是在当前线程(实际上是同步顺序)调用,那么这里的异步调用形式的程序也不需要做任何修改,而且两个 ManualResetEvent 也r仍然可以正常运行。所以关键不是“异步、不异步”,而是你要了解假设是多线程的,如何同步!只要知道同步策略,不管你怎样写这里的代码,道理都是一样的。