c# - BeginXXX 中 FromAsync 的参数太多?

标签 c# asynchronous iasyncresult

我有一个具有以下签名的异步方法:

IAsyncResult BeginGetMyNumber(string foo, string bar, string bat, int bam, AsyncCallback callback, object state)

我想像这样使用 Factory.FromAsync 来执行它:

var result  = Task<int>.Factory.FromAsync(
                instance.BeginGetMyNumber, 
                instance.EndGetMyNumber, 
                "foo",
                "bar",
                "bat",
                100, /*bam*/
                null);

但我收到以下错误:

Argument 1: cannot convert from 'method group' to 'System.Func'

似乎没有合适的重载 FromAsync 方法 http://msdn.microsoft.com/en-us/library/system.threading.tasks.taskfactory.fromasync.aspx ,它在 BeginXXX 方法上最多只支持 5 个参数(包括回调和状态)。

除了重构 BeginXXX 方法以获取一个对象而不是六个参数之外,还有没有其他方法可以使用 FromAsync 来执行它?

最佳答案

result = Task<string>.Factory.FromAsync(
  (callback, state) => instance.BeginGetMyNumber("foo", "bar", "bat", 1, callback, state),
   instance.EndGetMyNumber, state: null);

此技术(部分函数应用程序)适用于具有任意数量输入参数的 begin 方法。

关于c# - BeginXXX 中 FromAsync 的参数太多?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15582450/

相关文章:

javascript - 在 Javascript 中循环包含 Ajax 调用的函数

silverlight - HttpWebRequest.EndGetResponse 在 Windows Phone 7 中引发 NotSupportedException

c# - Entity Framework 左连接多个表失败

c# - 如何按键从 RouteTable.Routes 集合中获取 url?

c# - 天界壁虎。如何按类名单击项目?

c# - C# 中的可事务对象?

WCF 服务 - 异步 如何?

javascript - 无法通过异步 ajax 调用呈现 base64 图像返回

c# - 如何打破 IAsyncResult?

c# - 通过重建 AsynchResult 对象来模拟推送技术 - 这可能吗?