2016-07-30 247 views
-1

我很难理解异步/等待。比方说,我有一个类A和类B.类A从wcf服务方法返回一个ActionResult。在此之前,它使用await从另一个类中调用异步方法。这是否意味着等待obj.method(param1)将异步运行,而不等待其执行完成,wcfservice方法将执行?还是等到它完成?异步编程使用异步/等待

我希望somemethod()应​​该继续执行,而不必等待classB中方法的结果。我将如何能够实现这一目标?

public async classA 
{ 
    public async IHttpActionResult somemethod 
    { 
     classB obj = new classB(); 
     await obj.method(param1); 
     returnok(somewcfservice.method()); 
    } 

public classB 
{ 
    public async Task method(param) 
    { 
     obj.somebuiltinmethod(param) 
    } 
} 
+1

您发布的代码是无效的。 'somemethod()'不能使用'await'而不是'async'。这个问题也非常广泛。堆栈溢出不是教程网站。你应该研究语言功能。如果您仍然有疑问,请特别注意并确保解释您已完成的研究。如果你想'somemethod()'在不等待的情况下正常完成,那么不要等待(即不要使用'await')。 –

回答

-1

1.这是否意味着等待着obj.method(参数1)将aysnchronously运行,而无需等待其执行完毕,wcfservice方法将执行?还是等到它完成?

await obj.method(param1);将等到obj.method在恢复执行流程之前完成执行。这意味着obj.method(param1);完成,然后将调用Web服务方法。

2.我希望somemethod()应​​该继续执行,而不必等待classB中方法的结果。我将如何能够实现这一目标?

你可以做这样的事情:

var task = obj.method(param1); 
var result = somewcfservice.method() 
Task.WaitAll(task); 
returnok(result); 
+0

_“await obj.method(param1);将等到obj.method完成”_ - 不,它不会。它只是无法编译,因为somemethod()不是'async'方法。 _“你可以做这样的事情:”_ - 不,这与他似乎要求的相反。您的示例将阻止该线程,直到任务完成。他特别要求'somemethod()'方法继续执行(并且可能返回)_“**不等待**”(他的话)。 –

+0

@PeterDuniho我同意代码不能编译,但我认为他很快就会实现。那么只是创建一项任务而不是等待被运行是超出我的想象! –