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

如何异步调用某个优先级的方法?分享

时间:2023-04-10 23:04:12 C#

如何调用具有某些优先级的异步方法?我需要以不同的优先级异步调用多个方法。我的第一个想法是使用ThreadPool并像这样更改Thread的优先级:staticvoidRun(){ThreadPool.QueueUserWorkItem(newWaitCallback(SomeMethod));}staticvoidSomeMethod(objecto){Thread.CurrentThread。优先级=ThreadPriority.BelowNormal;//这个可以吗?//在这里做一些工作}这行得通吗?您有什么建议?根据http://msdn.microsoft.com/en-us/library/0ka9477y.aspx,如果您以2.0为目标,它将不起作用,它暗示了3.5中的一些差异,但没有具体提及优先级:当不使用线程时池线程有几种情况适合创建和管理自己的线程而不是使用线程池线程:您可能需要提出自己的实现,并直接处理线程的创建。问题:你想达到什么目的?您有一组任务要处理,并且您希望优先级较高的任务先发生,然后是较低的任务;还是您真的想要不同优先级的线程?这绝对是个糟糕的主意。通常,设置线程或进程优先级不是一个好主意,因为它是不确定的,并且您可能会饿死其他线程/进程的行为。此外,由于饥饿,您实际上可能会提高优先级较低的线程/进程的优先级。最重要的是,线程池的线程旨在被重用,并且通过更改线程的优先级,您正在更改在例程运行后将获得线程的任务的期望。话虽这么说,你有两个选择。如果你只是需要对任务进行优先级排序,而不介意在你的任务之前执行其他与你的任务无关的项目,那么你可以使用具有生产者消费者模式的线程池,其中一些包装代码会从中获取最高优先级的项目你的队列。如果您希望线程只运行您的任务,那么您必须创建自己的线程池(使用System.Thread类),然后执行相同的操作,使用包装代码根据优先级执行任务。.NET4.0(尚未发布)中System.Threading命名空间中的新类将为您创建单独的线程池。我认为为了干净起见,您还应该在退出方法时恢复线程优先级!(使用try...finally或类似的东西)这是一个支持不同优先级的自定义线程池的旧但非常详细的实现。以上就是C#学习教程:如何异步调用某个优先级的方法?如果所有分享的内容对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处: