我创建了一个WCF服务,其operationcontract和实现如下:
[OperationContract]
Task<string> GetName(string name);
public async Task<string> GetName(string name)
{
await Task.Delay(5000);
var task1 = Task<string>.Factory.StartNew(() =>
{
return "Your name is : " + name;
});
var result = await task1;
return result;
}
现在我正在客户端使用此服务,并创建了客户端。
ServiceReference1.Service1Client client = new ServiceReference1.Service1Client();
我的实现中有两种方法:GetName和GetNameAsync。
我可以使用以下两种方式来访问该服务。
var result_GetName = await Task.Factory.StartNew(() => client.GetName("My Input"));
var result_GetNameAsync = await client.GetNameAsync("My Input");
- Q.1 这两种方法有什么区别吗?
- Q.2 在特定情况下是否建议使用其中一种?还是我可以随时使用任何一种。
- Q.3 对于第二次调用,我在两个地方(客户端-服务器)都使用了async-await,这样做有什么优势吗?
请指导。
*Async
方法是“本地异步”的。我在博客文章中写了关于WCF的async
更新。 - Stephen Cleary