最近遇到的一个类库里面的异步函数都是类似这种类型的, 想用 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 }
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 的回复, 但是很明显你没有明白我的意思。 我的意思是如何用 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 调用现有的有回调委托参数的异步函数呢?
http://www.cnblogs.com/beginor/archive/2012/01/16/2323265.html