- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
考虑到 Async CTP 通过环境 SynchronizationContext
促进隐式调度,有什么理由不让我的 CancellationToken
和 IProgress
环境也是?
我目前正在通过方法传递这些,就像我传递一个 TaskScheduler
以进行显式调度一样。但是,鉴于调度程序现在应该是环境调度程序,我是否可以对拼图的其他部分遵循相同的规则?
最佳答案
CancellationToken
比 IProgress<T>
更可能是这个的候选者.与 IProgress<T>
, 你经常有不同的 T
在不同级别(更高级别 async
方法结合了其较低级别 await
调用的进度通知)。与 CancellationToken
,相同的 token 几乎总是传递给较低级别的 async
方法(假设它们支持取消)。 CancellationToken
确实支持一些非常高级的组合器,但它们几乎从未被使用过。
主要缺点是您将背离基于任务的异步模式。您必须记住,任何 Microsoft 或第 3 方代码都会采用显式 CancellationToken
。 - sp 你必须明确地将它从最低级别的环境上下文中拉出来 async
方法。此外,以后维护您的代码库的程序员可能会期望 TAP。
在考虑实现时也存在挑战。你会想要隐式的 CancellationToken
跟随 async
的调用方法,即使它们改变了线程上下文。我的意思是,考虑一下:方法 A
电话 ConfigureAwait(false)
在等待方法结果之前 B
.您不能使用简单的线程局部静态属性,因为您需要遵循从一个线程到另一个线程的异步执行上下文。
我似乎记得读过有关执行此操作的方法(可能使用 CallContext
类?),但一旦您这样做,您的性能就会下降(执行上下文迁移代码针对默认情况进行了高度优化)。
关于c# - 异步 CTP - 环境 CancellationToken 和 IProgress,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8774520/
我有一个异步方法 DoStuffAsync用 Task.Run 产生两个任务, 并且两个任务都使用单个 IProgress 报告它们的进度目的。从用户的角度来看,只有一个操作,因此显示两个进度条(每个
我已经成功实现了 Task在我的类 UpdateManager 中,它从我的网络空间下载文件。 public async Task DownloadPackageTask(IProgress prog
我有以下代码片段: var progress = new Progress(); var count = 0; progress.ProgressChanged += (o, transferProg
我正在通过 IProgress 和 Report 方法更新我的 UI。我做类似的事情 IProgress p = new Progress(ReportProgress); Task task = T
我在 C# 中有以下内容 public static void Main() { var result = Foo(new Progress(i => Console.Writ
使用 IProgress 时报告进度,应该是 代码报告进度的责任是将其进度报告的频率限制在“合理”的范围内,-或- 具体执行责任IProgress请注意,进度报告的频率可能高于其呈现此进度的合理方式。
我遵循以下描述的模式:https://blogs.msdn.microsoft.com/dotnet/2012/06/06/async-in-4-5-enabling-progress-and-can
所有,我有一项昂贵的任务,我使用 async 进行/await .NET4.5 下的关键字。我通过 Progress 从后台线程报告进度类(class)。 我传入的对象IProgress因为类型是 P
考虑以下实现,一个方法接受 IProgress , 迭代超过 10000 个对象。 numbers array 变量返回 10000 个对象,但是 IProgress仅报告 9970 - 9980 个
我正在使用基于任务的异步模式 (TAP) 执行一些长任务,使用 IProgress向主 UI 报告进度。Progress.Report似乎只有在它之前有另一个等待任务时才有效。例如,如果我在内联 fo
我一直在尝试创建一个可重复使用的模式进度窗口(即 progressForm.ShowDialog())来显示正在运行的异步任务的进度,包括启用取消。 我已经看到一些实现通过 Hook 表单上的 Act
我注意到以下行为。由 IProgress 填充时,控制台输出消息出现在错误的文件夹中。 var recounter = new IdRecounter(filePath, new Progress(C
全部,我有一个调用IProgress.Report();的方法更新我的用户界面并进行相关数据选择。后台线程随后通过一个与之一起工作的接口(interface)获取当前选择(在 UI 上)。因此,重要的
我有一个控制台应用程序,它使用类库来执行一些长时间运行的任务。这是一个 .net 核心控制台应用程序并使用 .net 核心通用主机。我也用 ShellProgressBar显示一些进度条的库。 我的托
是否有一些较旧的 .NET 4.0 等同于 IProgress 的接口(interface)或类? (仅适用于 .NET 4.5)可用于将进度从任务发送到 UI? 或者我应该为它编写自己的类/接口(i
考虑到 Async CTP 通过环境 SynchronizationContext 促进隐式调度,有什么理由不让我的 CancellationToken 和 IProgress 环境也是? 我目前正在
我正在使用分三步完成的异步操作,在完成之前返回部分结果。最初它使用事件来表示进度,我想将其正确包装为 await能够操作(或它们的链)。 确切地说,它是 Windows Phone 7 中的 Phot
我有一个 Hub 类,它有一个长时间运行的方法,我需要在它工作时显示一个进度条。 我读了this article我认为可以在异步方法中使用 IProgress 接口(interface)来发送长时间运
我有一个 Hub 类,它有一个长时间运行的方法,我需要在它工作时显示一个进度条。 我读了this article我认为可以在异步方法中使用 IProgress 接口(interface)来发送长时间运
我正在使用 jupyter notebook 并安装 ipywidgets==7.4.2 widgetsnbextension pandas-profiling=='.0.0 我也跑了: !jupyt
我是一名优秀的程序员,十分优秀!