当前位置: 首页 > 编程语言 > C#

如何在单独的线程上有条件地运行一个类分享

时间:2023-04-10 14:50:49 C#

如何在单独的线程上有条件地运行一个类我有一个将日志信息保存到数据库的类(在NServiceBus消息处理方法中)。大多数时候,日志记录可以在与主进程分开的线程(和事务)上完成。但这一切都需要在同一个后台线程上完成(这意味着它们必须按顺序完成,而不是与主进程同步)。但是,一旦它开始从NServiceBus到实际数据的外键,它就需要在同一个线程上。下面是一些示例代码:}}publicvoidLogSomeOtherStuff(Stuffstuff){using(MoveOutsideTransaction()){//在这里做其他方法dataAccess.SaveChanges();}}privateIDisposableMoveOutsideTransaction(){如果(loggingOutsideTransaction)返回新的TransactionScope(TransactionScopeOption.Suppress);返回空值;我想知道是否有一种方法可以使用我的事务条件也有条件地将运行移动到另一个线程。(但前提是它会抑制事务。)我想知道是否有一种方法可以使用我的事务条件有条件地将运行移动到另一个线程。您不能只是将方法的执行移动到不同的线程上。通常,线程不会那样工作。但是,您可以做的是设置一个专用线程,该线程可以参与编组操作,该操作或多或少地模拟执行到另一个线程的传输。重要的是,这个专用线程被专门编码以接受这个编组操作。这是它的工作原理。公共类DedicatedThread{privateBlockingCollectionactions=newBlockingCollection();publicDedicatedThread(){varthread=newThread(()=>{while(true){Actionaction=actions.Take();action();}});}publicvoidSubmitAction(Actionaction){actions.Add(action);你可以像这样使用它。以上就是C#学习教程的全部内容:有条件地在单独线程上运行一个类的方法。如果对大家有用,需要详细了解C#学习教程,希望大家多多关注——if(loggingOutsideTransaction){//在专用线程上异步执行。dedicatedThread.SubmitAction(yourActionDelegate);}else{//同步执行。你的动作委托();如需转载请注明出处: