草庐IT

task-parallel-library

全部标签

c# - 实现可重试 block 的正确完成

Teaser:伙计们,这个问题不是关于如何实现重试政策的。这是关于正确完成TPL数据流block。这个问题主要是我之前问题的延续RetrypolicywithinITargetBlock.这个问题的答案是@svick的智能解决方案,它利用了TransformBlock(来源)和TransformManyBlock(目标)。剩下的唯一问题就是如何以正确的方式完成这个block:先等待所有重试完成,然后再完成目标block。这是我最终得到的结果(这只是一个片段,不要过多关注非线程安全的retries集):varretries=newHashSet>();TransformManyBlock

c# - 为什么会出现 TaskCanceledException?

我有以下测试代码:voidButton_Click(objectsender,RoutedEventArgse){varsource=newCancellationTokenSource();vartsk1=newTask(()=>Thread1(source.Token),source.Token);vartsk2=newTask(()=>Thread2(source.Token),source.Token);tsk1.Start();tsk2.Start();source.Cancel();try{Task.WaitAll(new[]{tsk1,tsk2});}catch(Exce

c# - 为什么会出现 TaskCanceledException?

我有以下测试代码:voidButton_Click(objectsender,RoutedEventArgse){varsource=newCancellationTokenSource();vartsk1=newTask(()=>Thread1(source.Token),source.Token);vartsk2=newTask(()=>Thread2(source.Token),source.Token);tsk1.Start();tsk2.Start();source.Cancel();try{Task.WaitAll(new[]{tsk1,tsk2});}catch(Exce

c# - 无法在 visual studio 2015 中构建,因为找不到 'Microsoft.Build.Tasks.v14.0.dll'

尝试在visualstudio2015中构建时,缺少以下文件?该项目之前是在VS2013中构建的。SeverityCodeDescriptionProjectFileLineErrorThetaskfactory"CodeTaskFactory"couldnotbeloadedfromtheassembly"C:\ProgramFiles(x86)\MSBuild\14.0\bin\Microsoft.Build.Tasks.v14.0.dll".Couldnotloadfileorassembly'file:///C:\ProgramFiles(x86)\MSBuild\14.0\b

c# - 无法在 visual studio 2015 中构建,因为找不到 'Microsoft.Build.Tasks.v14.0.dll'

尝试在visualstudio2015中构建时,缺少以下文件?该项目之前是在VS2013中构建的。SeverityCodeDescriptionProjectFileLineErrorThetaskfactory"CodeTaskFactory"couldnotbeloadedfromtheassembly"C:\ProgramFiles(x86)\MSBuild\14.0\bin\Microsoft.Build.Tasks.v14.0.dll".Couldnotloadfileorassembly'file:///C:\ProgramFiles(x86)\MSBuild\14.0\b

c# - Thread.Sleep 与 Task.Delay?

我知道Thread.Sleep阻塞了一个线程。但是Task.Delay也会阻塞吗?或者它就像Timer一样使用一个线程来处理所有回调(当不重叠时)?(this问题不包括差异) 最佳答案 MSDN上的文档令人失望,但使用Reflector反编译Task.Delay可提供更多信息:publicstaticTaskDelay(intmillisecondsDelay,CancellationTokencancellationToken){if(millisecondsDelay基本上,这个方法只是一个包裹在任务中的计时器。所以是的,您可以

c# - Thread.Sleep 与 Task.Delay?

我知道Thread.Sleep阻塞了一个线程。但是Task.Delay也会阻塞吗?或者它就像Timer一样使用一个线程来处理所有回调(当不重叠时)?(this问题不包括差异) 最佳答案 MSDN上的文档令人失望,但使用Reflector反编译Task.Delay可提供更多信息:publicstaticTaskDelay(intmillisecondsDelay,CancellationTokencancellationToken){if(millisecondsDelay基本上,这个方法只是一个包裹在任务中的计时器。所以是的,您可以

c# - 我为什么要费心使用 Task.ConfigureAwait(continueOnCapturedContext : false);

考虑以下窗口窗体代码:privateasyncvoidUpdateUIControlClicked(objectsender,EventArgse){this.txtUIControl.Text="Iwillbeupdatedafterawait-ihope!";awaitTask.Delay(5000).ConfigureAwait(continueOnCapturedContext:false);this.txtUIControl.Text="Iamupdatednow.";}这里在第3行抛出异常,因为在await之后代码在非UI线程上执行。ConfigureAwait(false

c# - 我为什么要费心使用 Task.ConfigureAwait(continueOnCapturedContext : false);

考虑以下窗口窗体代码:privateasyncvoidUpdateUIControlClicked(objectsender,EventArgse){this.txtUIControl.Text="Iwillbeupdatedafterawait-ihope!";awaitTask.Delay(5000).ConfigureAwait(continueOnCapturedContext:false);this.txtUIControl.Text="Iamupdatednow.";}这里在第3行抛出异常,因为在await之后代码在非UI线程上执行。ConfigureAwait(false

c# - 使用 ConfigureAwait(false) 和 Task.Run 有什么区别?

我知道建议对库代码中的await使用ConfigureAwait(false),这样后续代码就不会在调用者的执行上下文中运行,这可能是一个UI线程。我也明白,出于同样的原因,应该使用awaitTask.Run(CpuBoundWork)而不是CpuBoundWork()。ConfigureAwait示例publicasyncTaskLoadPage(Uriaddress){using(varclient=newHttpClient())using(varhttpResponse=awaitclient.GetAsync(address).ConfigureAwait(false))us