首页 新闻 搜索 专区 学院

如何对非标准异步函数用 Task 进行封装调用?

0
悬赏园豆:20 [已关闭问题] 关闭于 2012-01-16 12:50

最近遇到的一个类库里面的异步函数都是类似这种类型的, 想用 System.Threading.Tasks.Task 进行异步调用, 但是与 Task.Factory.FromAsync 函数需要的参数类型不一致, 请问这类函数应该怎样用 Task 进行调用呢? 

1 public static void AddAsync(int a, int b, Action<int> callback) {
2 new Thread(() => {
3 Thread.Sleep(TimeSpan.FromSeconds(2));
4 if (callback != null) {
5 callback(a + b);
6 }
7 }).Start();
8 }
张志敏的主页 张志敏 | 菜鸟二级 | 园豆:322
提问于:2012-01-12 13:58
< >
分享
所有回答(2)
0
    public static void AddAsync(int a, int b)
{
Task<int>.Factory.StartNew(() => a + b).ContinueWith(u => Console.WriteLine(u.Result));
}

 or

 public static void AddSync(int a, int b, Action<int> callback)
{
Task<int>.Factory.StartNew(() => a + b).ContinueWith(u =>
{
if(u.Exception==null)
{
callback(u.Result);
}
}
);
}

 调用: AddSync(1, 2, Console.WriteLine);

ulee | 园豆:10 (初学一级) | 2012-01-12 17:02

感谢 ulee 的回复, 但是很明显你没有明白我的意思。 我的意思是如何用 Task 对现有的这样的异步函数进行调用, 而不是用 Task 重新实现现有的异步函数。

比如 System.Net.WebRequest 有这样两个函数, BeginGetResponse 和 EndGetResponse , 我们可以这样用 Task 进行调用:

var request = WebRequest.CreateHttp("http://www.cnblogs.com");
var requestTask = Task.Factory.FromAsync<WebResponse>(
request.BeginGetResponse,
request.EndGetResponse,
null
);
requestTask.Wait();
var response = requestTask.Result;

我想问的是如何用 Task 调用现有的有回调委托参数的异步函数呢?

支持(0) 反对(0) 张志敏 | 园豆:322 (菜鸟二级) | 2012-01-13 14:02
0

http://www.cnblogs.com/beginor/archive/2012/01/16/2323265.html

张志敏 | 园豆:322 (菜鸟二级) | 2012-01-16 12:49
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册