- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我有以下代码行用于从 NetworkStream 异步读取:
int bytesRead = await Task<int>.Factory.FromAsync(this.stream.BeginRead, this.stream.EndRead, buffer, 0, buffer.Length, null);
我想让它支持取消。我知道我可以 cancel tasks using a CancellationTokenSource , 但是我看不出有什么方法可以将它传递给 TaskFactory.FromAsync() .
是否可以使 FromAsync() 构造的任务支持取消?
编辑:我想取消一个已经在运行的任务。
最佳答案
Gigi,不幸的是,FromAsync 的语义性质表明您只是将异步过程调整为 TPL 的 API (TPL = Microsoft's Task Parallel Library)
本质上,TPL 的 ReadAsync 控制异步行为本身,而 FromAsync 仅包装行为(但不控制它)。
现在,由于 Cancellation 是 TPL 特定的构造,并且由于 FromAsync 无法控制被调用的异步方法的内部工作,因此无法保证完全取消任务并确保正确关闭所有资源(这这就是它被省略的原因。如果你很好奇,只需反编译该方法即可;))
在这些情况下,将自己的实际异步调用包装在正常任务中并检测 OperationCancelled 异常更有意义,这将使您有机会通过进行适当的调用来关闭流。
简而言之,答案是否,但没有什么能阻止您创建一个通用的重载方法,该方法将根据流的类型选择正确的策略来彻底关闭流。
关于c# - 带有 CancellationTokenSource 的 Task.Factory.FromAsync,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24980427/
我正在开发一个 C# 应用程序并使用一些异步调用。我必须使用给定供应商的 SDK 才能集成到供应商平台中。看起来 SDK 异步方法基于 5.0 之前的 C# 并使用 APM 模型而不是 TPM(我的大
我有两个任务 t1和 t2我从使用开始/结束异步模型设计的旧 API 生成,如下所示。然而,我严格想要一个接一个地运行它们。 (这是 Azure 表存储 API) Task t1 = Task.Fac
我有以下功能 public static Task SendTaskAsync(this Socket socket, byte[] buffer, int offset, int size, Soc
好吧,试图理解 Rx,有点迷失在这里。 FromAsyncPattern 现已弃用,因此我采用了 here 中的示例(使用 Rx 点亮任务部分),它有效,我只是做了一些更改,不使用 await 只是等
我从 WinForm 进行了测试,因为我听说控制台应用程序在 async 方面撒谎: List lstFiles = new List(); lstFiles = FillList()
我正在尝试发送 url 请求并异步获取响应,但是当我将 .fromAsync 方法与 .ContinueWith 方法一起使用时,任务状态永远不会从 WaitingForActivation 更改为运
我正在开发一个连接尝试超时应该是可配置的应用程序。 如果您看一下下面的代码,您会意识到我正在尝试做的事情:WAITING 20 毫秒(目前已硬编码),如果可以建立连接,则调用 onConnected
我有一个具有以下签名的异步方法: IAsyncResult BeginGetMyNumber(string foo, string bar, string bat, int bam, AsyncCal
详见 TPL and Traditional .NET Framework Asynchronous Programming MSDN 文章和 Stephen Toub 的 Tasks and the
有人可以解释为什么即使到达流的末尾,下面的 AsObservable 方法也会创建一个无限循环吗? public static class StreamExt { public static
有没有人可以指导何时使用其中一种方法而不是另一种方法。他们似乎做同样的事情,因为他们将 TPL Task 转换为 Observable。 Observable.FromAsync 似乎支持取消标记,这
我是 C# 的新手,所以请多多包涵。 我正在尝试了解 Task FromAsync 的工作原理。 var task1 = Task.Factory.FromAsync(Foo1, ...); //w
如何将 Task.Factory.FromAsync 工厂用于通过“out”参数返回多个值的结束方法? begin 方法具有以下签名: public virtual System.IAsyncResu
我有一个返回任务的方法,例如: public static Task SendAsync(this Socket socket, byte[] buffer, int offset, int coun
我想知道在方法的阻塞版本上使用 TPL TaskFactory.FromAsync 和使用 TaskFactory.StartNew 之间是否存在任何性能影响。我正在编写一个 TCP 服务器,它支持不
问题可以用 MSDN 的以下引述来描述: The CommandTimeout property will be ignored during asynchronous method calls su
我正在尝试测试一些依赖 Task 进行后台计算的类(从网络位置检索数据)。该类获取一个未启动的任务实例,添加一个 ContinueWith 方法,然后在该任务上调用 Start。像这样的东西: pri
我有以下扩展方法用于对 WebRequest 对象使用异步调用。 public static Task GetReponseAsync(this WebRequest request) {
我在测试使用 Observable.FromAsync() 的类时遇到问题和 Observable.Switch() .它所做的是等待触发器 observable 产生一个值,然后它开始一个异步操作,
我有以下代码行用于从 NetworkStream 异步读取: int bytesRead = await Task.Factory.FromAsync(this.stream.BeginRead, t
我是一名优秀的程序员,十分优秀!