我该如何异步调用两种方法



我有以下两种方法:

private static void webservicecalls()
{
   WebServiceOne();
   WebServiceTwo();
}

那么,我如何使这两种方法不同步,而不是在调用第二个Web服务之前等待第一个Web服务呼叫?

更新:

现在Webericeone和WebServicetwo都有sub呼叫,例如:

private static void WebServiceOne()
{
    CallOne();
    CallThree();
}
private static void WebServiceTwo()
{
    CallTwo();
    CallFour();
}

所以我需要呼叫才能为子呼叫的以下顺序: -

CallOne();
CallTwo();
CallThree();
CallFour();

取决于您用来实现 webserviceone webservicetwo的用途,网络服务工具本身很可能会具有完整的异步支持,因此首先要做的是:检查并使用异步API而不是同步API。

如果出于某种原因不存在 - 您可以做类似:

的事情
var task = new Task(() => webservice1());
task.Start();
webservice2();
task.Wait();

(显然,您可以完全顺序运行;

您的编辑:如果订单必须完全是"一个","两个","三","四",那么您就不能并行执行它们,因此您只需要运行整个内容在背景中:

new Task(() => {
    webservice1();
    webservice2();
}).Start();

将保证执行顺序,牺牲并行性。

Action one = () => WebServiceOne();
Action two = () => WebServiceTwo();
one.BeginInvoke(null, null);
two.BeginInvoke(null, null);

我喜欢使用动作。

private static void WebServiceCalls()
{ 
    var someState = 3;
    Action a1 = () => { WebserviceOne(); };
    Action a2 = () => { WebserviceTwo(); };
    a1.BeginInvoke(WebServiceCallBack, someState); //see code section below
    a2.BeginInvoke(null, null); //fire and forget...
}

这还允许您为处理代码创建回调:

void WebServiceCallBack(IAsyncResult result)
{
    int state = (int)result.AsyncState;
    //do more??
}

@mark提出一个有效的观点:如果您正在使用Visual Studio中的Web服务,则可以使用"服务参考配置"窗口使用异步语法创建Channel代理类。(即使用BeginWebServiceOneEndWebServiceOne,这将排除创建异步包装器的需求。)

在此处查看任务库,以及左侧的子类别的导航

http://msdn.microsoft.com/en-us/library/dd537609.aspx

最新更新