我在WCF中看到他们有[OperationContract(IsOneWay = true)]属性.但是WCF似乎有点缓慢而且很重要,只是为了创建一个非阻塞功能.理想情况下会出现类似静态无效的阻塞MethodFoo(){},但我认为不存在.
在C#中创建非阻塞方法调用的最快方法是什么?
例如
class Foo
{
static void Main()
{
FireAway(); //No callback, just go away
Console.WriteLine("Happens immediately");
}
static void FireAway()
{
System.Threading.Thread.Sleep(5000);
Console.WriteLine("5 seconds later");
}
}
Run Code Online (Sandbox Code Playgroud)
注意:阅读此内容的每个人都应该考虑他们是否真的想要完成这个方法.(参见#2最佳答案)如果方法必须完成,那么在某些地方,比如ASP.NET应用程序,你需要做一些事情来阻止并保持线程活着.否则,这可能会导致"忘记但永远不会实际执行",在这种情况下,当然,根本不编写任何代码会更简单.(很好地描述了它在ASP.NET中的工作原理)
在.Net进程中,只有一个托管线程池。我们可以根据需要通过公共属性设置最小和最大线程数。
在.Net 中,我们还可以Parallel.ForEach从后台的托管线程池中获取线程。
我们Parallel.ForEach还可以设置MaxDegreeOfParallelism限制最大线程数。
我有两个Parallel.ForEach并行运行。一个MaxDegreeOfParallelism设置为 3,另一个设置为 7。
我的问题是:我的两个Parallel.ForEach循环是否在幕后使用相同的线程池。如果是,如何Parallel.ForEach限制线程MaxDegreeOfParallelism。多个
Parallel.ForEach循环和一个托管线程池如何协同工作?如果您能在我深入了解 .net core 源代码之前提供高级解释或一些指示,那将会非常有帮助。
.net c# multithreading task-parallel-library parallel.foreach