我们说我有一个WCF Websocket服务:
[ServiceContract(CallbackContract =typeof(ICallback))]
public interface ISomeInterface
{
[OperationContract]
string GiveMeString();
}
现在,在客户端,感谢WCF,我也可以使用GiveMeStrignAsync方法。现在,我想创建使用此类WCF生成的异步方法的客户端API。 有两种方法可以做到这一点:
public Task<string> GiveMeStringAsync() //method on client side
{
Task<string> task = null;
try
{
task = ServiceReference.GiveMeStringAsync();
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
return task;
}
然后我将等待这种方法。
或者可以在此方法中使用await:
public async Task<string> GiveMeStringAsync() //method on client side
{
string s = String.Empty;
try
{
s = await ServiceReference.GiveMeStringAsync();
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
return s;
}
我的问题:
据我所知async / await正确,在第二个例子中,我仍然需要在某个地方等待这个方法,所以会有更多的等待。更多等待导致性能下降?
让我们说我是对的,选择1号是一种方法。如果在我的客户端我有一些API的包装器(并不重要)。在这个包装器类中,我仍然应该返回(不是等待)Task并且在调用包装类的方法(调用API方法)时只使用await一次?
答案 0 :(得分:1)
看起来你需要microsoft post就此问题,但我会根据你的要求总结一下:
还有更多等待降低性能吗?
如果您只测量单个线程。您等待任务的全部原因是,等待时间长的任务不会阻止您可能同时执行的其他工作。
您如何await
未标记为async
的任务方法?您还应该考虑其他因素,例如:您是否真的希望try / catch在没有await
的情况下工作?它可能不会。
简单的答案就是一直等待/异步,并且不要忘记在适当的地方使用CancellationToken
和.ConfigureAwait(false);
。