首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >非阻塞线程

非阻塞线程
EN

Stack Overflow用户
提问于 2013-08-29 23:34:58
回答 4查看 2.4K关注 0票数 1

我正在重构一个C#项目,该项目被几个完整的应用程序使用。该类与硬件交互,执行某些命令通常需要数百毫秒或更长时间。在许多情况下,我将替换前程序员编写的Thread.Wait()调用,以执行这些操作。

现在,该项目为使用它的几个项目提供的一些函数需要数百毫秒或更长时间才能执行,并将一个值返回给程序必须使用的调用程序。我的问题是,在这个项目中是否可以使用某种机制使这些调用在主线程之外的某个线程上执行和返回?换句话说,我希望从这个项目的角度使这些方法非阻塞,而不是要求使用这些函数的其他应用程序将调用放在一个单独的线程中。

谢谢

EN

回答 4

Stack Overflow用户

发布于 2013-08-29 23:43:53

换句话说,我希望从这个项目的角度使这些方法非阻塞,而不是要求使用这些函数的其他应用程序将调用放在一个单独的线程中。

通常,最好的方法通常是在这种场景中返回一个Task<T>。这允许调用方在必要时阻塞,或者使用新的awaitasync关键字与库进行干净的协调,而无需阻塞或强迫它们移动到单独的线程。

票数 4
EN

Stack Overflow用户

发布于 2013-08-30 03:16:02

如果使用的是.net 4.5,则可以使用Task.Run在单独的线程上执行慢速操作,然后在主线程返回时不执行ConfigureAwait(false)操作。

代码语言:javascript
复制
Task.Run(() => <slow operatoion).ConfigureAwait(false);
票数 1
EN

Stack Overflow用户

发布于 2013-08-29 23:45:02

不知道您使用的是哪个版本的框架,请看一下开始/结束异步模式。您应该考虑更改项目的API以实现它。

http://msdn.microsoft.com/en-us/library/ms228963.aspx

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

https://stackoverflow.com/questions/18522621

复制
相关文章

相似问题

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