首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >线程的异步委托

线程的异步委托
EN

Stack Overflow用户
提问于 2015-03-01 22:04:24
回答 1查看 849关注 0票数 1

当使用线程时,使用异步委托是否合乎逻辑?例如,假设我们有一个WCF SOAP服务,并且我们有一个客户端桌面应用程序,它使用WCF服务。在这个应用程序中,我们需要同时具有同步和异步机制,因此有时我们需要使用线程,有时需要使用异步任务。现在假设我们需要在线程中使用WCF服务,所以我们可以用以下两种形式编写线程:

代码语言:javascript
复制
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());
});

哪一个更符合逻辑?我的意思是,选择第二种选择有意义吗?问这个问题是因为第一个问题也不影响应用程序的响应性。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-03-01 22:16:32

这两个示例都是独立于UI线程运行的,这就是为什么两个示例都不会影响响应性的原因。

那么,行为上有什么区别呢?

在第二个示例中,您创建的线程将在GetData完成之前终止。当GetData完成后,您的代码将在另一个线程上继续,从线程池中提取。

两者都是“合乎逻辑的”,但这是否更好取决于您的使用需求。

终止线程,然后使用线程池,意味着线程计数可能保持在较低的水平,因此应用程序将使用较少的资源。

但是,如果应用程序已经使用了最大数量的线程池线程,则在等待线程池线程可用时,可能会等待处理返回的数据。

这只在可伸缩性是问题的情况下才有意义,而且您正在使用尽可能多的机器资源。在大多数情况下,这根本不会产生明显的差别。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28799694

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档