当使用线程时,使用异步委托是否合乎逻辑?例如,假设我们有一个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());
});哪一个更符合逻辑?我的意思是,选择第二种选择有意义吗?问这个问题是因为第一个问题也不影响应用程序的响应性。
发布于 2015-03-01 22:16:32
这两个示例都是独立于UI线程运行的,这就是为什么两个示例都不会影响响应性的原因。
那么,行为上有什么区别呢?
在第二个示例中,您创建的线程将在GetData完成之前终止。当GetData完成后,您的代码将在另一个线程上继续,从线程池中提取。
两者都是“合乎逻辑的”,但这是否更好取决于您的使用需求。
终止线程,然后使用线程池,意味着线程计数可能保持在较低的水平,因此应用程序将使用较少的资源。
但是,如果应用程序已经使用了最大数量的线程池线程,则在等待线程池线程可用时,可能会等待处理返回的数据。
这只在可伸缩性是问题的情况下才有意义,而且您正在使用尽可能多的机器资源。在大多数情况下,这根本不会产生明显的差别。
https://stackoverflow.com/questions/28799694
复制相似问题