草庐IT

task-parallel-library

全部标签

c# - 主线程的 SynchronizationContext.Current 如何在 Windows 窗体应用程序中变为 null?

我的应用程序出现问题:在某些时候,主线程的SynchronizationContext.Current变为null。我无法在一个孤立的项目中重现同样的问题。我的真实项目很复杂;它混合了Windows窗体和WPF并调用WCFWeb服务。据我所知,这些都是可能与SynchronizationContext交互的系统。这是我的独立项目的代码。我真正的应用程序做了类似的事情。但是,在我的真实应用程序中,当执行延续任务时,主线程上的SynchronizationContext.Current为null。privatevoidbutton2_Click(objectsender,EventArgs

c# - 主线程的 SynchronizationContext.Current 如何在 Windows 窗体应用程序中变为 null?

我的应用程序出现问题:在某些时候,主线程的SynchronizationContext.Current变为null。我无法在一个孤立的项目中重现同样的问题。我的真实项目很复杂;它混合了Windows窗体和WPF并调用WCFWeb服务。据我所知,这些都是可能与SynchronizationContext交互的系统。这是我的独立项目的代码。我真正的应用程序做了类似的事情。但是,在我的真实应用程序中,当执行延续任务时,主线程上的SynchronizationContext.Current为null。privatevoidbutton2_Click(objectsender,EventArgs

c# - 编写自己的异步方法

我想知道如何以“正确”的方式编写您自己的异步方法。我看过很多这样解释异步/等待模式的帖子:http://msdn.microsoft.com/en-us/library/hh191443.aspx//Threethingstonoteinthesignature://-Themethodhasanasyncmodifier.//-ThereturntypeisTaskorTask.(See"ReturnTypes"section.)//Here,itisTaskbecausethereturnstatementreturnsaninteger.//-Themethodnameendsi

c# - 编写自己的异步方法

我想知道如何以“正确”的方式编写您自己的异步方法。我看过很多这样解释异步/等待模式的帖子:http://msdn.microsoft.com/en-us/library/hh191443.aspx//Threethingstonoteinthesignature://-Themethodhasanasyncmodifier.//-ThereturntypeisTaskorTask.(See"ReturnTypes"section.)//Here,itisTaskbecausethereturnstatementreturnsaninteger.//-Themethodnameendsi

c# - .NET Task 实例能否在运行期间超出范围?

如果我在方法中有以下代码块(使用.NET4和任务并行库):vartask=newTask(()=>DoSomethingLongRunning());task.Start();并且方法返回,该任务会超出范围并被垃圾收集,还是会运行完成?我没有注意到GCing有任何问题,但想确保我没有为GC的竞争条件做好准备。 最佳答案 更新:在我回答了这个问题之后(很久以前!),我发现任务总是运行到完成是不正确的-有一个小的,比方说“角落”情况,任务可能无法完成。原因是这样的:正如我之前回答的那样,任务本质上是线程;但它们是后台线程。当所有前台线程

c# - .NET Task 实例能否在运行期间超出范围?

如果我在方法中有以下代码块(使用.NET4和任务并行库):vartask=newTask(()=>DoSomethingLongRunning());task.Start();并且方法返回,该任务会超出范围并被垃圾收集,还是会运行完成?我没有注意到GCing有任何问题,但想确保我没有为GC的竞争条件做好准备。 最佳答案 更新:在我回答了这个问题之后(很久以前!),我发现任务总是运行到完成是不正确的-有一个小的,比方说“角落”情况,任务可能无法完成。原因是这样的:正如我之前回答的那样,任务本质上是线程;但它们是后台线程。当所有前台线程

c# - Task.Factory.StartNew 与 Task.Factory.FromAsync

假设我们有一个I/O绑定(bind)方法(例如进行数据库调用的方法)。此方法既可以同步运行,也可以异步运行。也就是说,同步:IOMethod()异步:BeginIOMethod()EndIOMethod()那么当我们以如下所示的不同方式执行该方法时,在资源利用率方面的性能差异是什么?vartask=Task.Factory.StartNew(()=>{IOMethod();});task.Wait();vartask=Task.Factory.FromAsync(BeginIOMethod,EndIOMethod,...);task.Wait(); 最佳答案

c# - Task.Factory.StartNew 与 Task.Factory.FromAsync

假设我们有一个I/O绑定(bind)方法(例如进行数据库调用的方法)。此方法既可以同步运行,也可以异步运行。也就是说,同步:IOMethod()异步:BeginIOMethod()EndIOMethod()那么当我们以如下所示的不同方式执行该方法时,在资源利用率方面的性能差异是什么?vartask=Task.Factory.StartNew(()=>{IOMethod();});task.Wait();vartask=Task.Factory.FromAsync(BeginIOMethod,EndIOMethod,...);task.Wait(); 最佳答案

c# - 是否可以限制 Parallel.ForEach 的内核数?

我在我的代码中使用了Parallel.ForEach。我所有的8个核心都达到100%。这对服务器上运行的其他应用程序不利。是否可以将执行限制为4个核心? 最佳答案 将ParallelOptions的实例传递给ParallelOptions.MaxDegreeOfParallelism设置为4到Parallel.ForEach。尽管如此,这在其他机器上可能没有意义,它们的内核可能比您多或少。通常,您应该让框架决定并行度。 关于c#-是否可以限制Parallel.ForEach的内核数?,我

c# - 是否可以限制 Parallel.ForEach 的内核数?

我在我的代码中使用了Parallel.ForEach。我所有的8个核心都达到100%。这对服务器上运行的其他应用程序不利。是否可以将执行限制为4个核心? 最佳答案 将ParallelOptions的实例传递给ParallelOptions.MaxDegreeOfParallelism设置为4到Parallel.ForEach。尽管如此,这在其他机器上可能没有意义,它们的内核可能比您多或少。通常,您应该让框架决定并行度。 关于c#-是否可以限制Parallel.ForEach的内核数?,我