- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我正在开发一个 C# 应用程序并使用一些异步调用。我必须使用给定供应商的 SDK 才能集成到供应商平台中。看起来 SDK 异步方法基于 5.0 之前的 C# 并使用 APM 模型而不是 TPM(我的大部分异步工作都是使用 TPM 和 await 命令)。
我找到了将 APM 异步方法包装到 TPM 中的 FromAsync 方法,但遇到了困难(希望我走在正确的道路上)。
有问题的异步方法称为“CommitAsync”,它来自供应商 SDK。当我将鼠标悬停在 VS 中的方法上时,它会输出:
EditableListConfigurationObject<UserConfiguration.Property>.CommitAsync(System.ComponentMode.AsyncCompletedEventHandler completedCallback, object userState)
所以我正在尝试转换为 TPM 并且到目前为止有这个(这是抛出错误):
var x = Task.Factory.FromAsync(userConfigurationObject.CommitAsync, UserCreated);
UserCreated 是我的回调函数
private void UserCreated(Object sender, SystemComponentMode.AsyncCompletedEventArgs args)
{}
当我将鼠标悬停在“FromAsync 方法中的 userConfigurationOBject.CommitAsync”上时,它显示“无法从方法组转换为 IAsyncResult”
据我了解,FromAsync 中的第一个参数是开始函数,第二个参数是结束/完成函数。如果我正确理解 APM 异步模型和此 SDK,我会假设 CommitAsync 是开始函数,然后它的回调将是结束函数?
最佳答案
Task.FromAsync
专门设计用于转换 APM-style asynchronicity进入TAP-style asynchronicity .因此,放在这里是不合适的。
有关将异步发生的内容转换为 TAP 样式的更通用方法,请使用 TaskCompletionSource<T>
做一个更“手动”的转换。大概,它会是这样的:
TaskCompletionSource<SystemComponentMode.AsyncCompletedEventArgs> tcs =
new TaskCompletionSource<SystemComponentMode.AsyncCompletedEventArgs>();
EditableListConfigurationObject<UserConfiguration.Property>
.CommitAsync((sender,args) => {
tcs.SetResult(args); //or perhaps tcs.SetException in some cases?
}, object userState);
var resultArgs = await tcs.Task;
就我个人而言,我发现 Task.FromAsync
对它的所有重载都非常讨厌。使用 TaskCompletionSource
更容易理解。
关于c# - 异步和 FromAsync,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42837856/
我正在开发一个 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
我是一名优秀的程序员,十分优秀!