【发布时间】:2015-03-02 06:16:32
【问题描述】:
使用线程时,使用异步委托是否合乎逻辑?例如,假设我们有一个 WCF SOAP 服务,并且我们有一个使用 WCF 服务的客户端桌面应用程序。在这个应用程序中,我们需要同时具有同步和异步机制,因此有时我们需要使用线程,有时需要使用异步任务。现在假设我们需要在一个线程中消费WCF服务,那么我们可以将线程写成两种形式:
Thread Worker = new Thread (()=>{
WCFServerClient client = new WCFServiceClient();
var GetData = client.GetData(new GetDataRequest());
});
Thread Worker = new Thread (async ()=>{
WCFServerClient client = new WCFServiceClient();
var GetData = await client.GetDataAsync(new GetDataRequest());
});
哪一个更符合逻辑?我的意思是选择第二种选择是否有意义。问这个是因为第一个也不会影响应用程序的响应能力。
【问题讨论】:
-
最好的解决方案是使用
Task而不是Thread:Task worker = Task.Run(async () => ...); -
@StephenCleary:为什么 Stephan,就 Task 更好而言。如果您不介意,请解释。 (我贪求信息)
-
检索结果和异常更容易。完整描述on my blog.
-
@StephenCleary: 非常感谢 Stephan,我在这里“*.com/questions/28788395/establishing-proxy-tunnel”还有一个关于 Sockets 的问题,在你的博客中我还找到了 TCP/IP 常见问题解答部分,我想你可以也可以帮助我解决这个问题,如果您这样做,我将不胜感激。
-
对不起,我不知道代理隧道。
标签: c# multithreading asynchronous