c# - 以异步方式启动任务的其他方式

标签 c# asynchronous task-parallel-library task response

还有哪些其他方法可以创建任务以开始并使用下面显示的代码的相同概念获得响应:(使用 .Net 4)

var uri = new Uri(website.SiteUrl);
var myReq = (HttpWebRequest)WebRequest.Create(uri);

var task = Task<WebResponse>.Factory.FromAsync(
                myReq.BeginGetResponse,
                myReq.EndGetResponse,
                null);

最佳答案

如果您使用的是 .Net 4.5

var task = myReq.GetResponseAsync();

对于 .Net 4.0 你可以这样写

public Task<HttpWebResponse> GetAsync(HttpWebRequest req)
{
    var tcs = new TaskCompletionSource<HttpWebResponse>();
    req.BeginGetResponse(e =>
        {
            if(e.IsCompleted)
                tcs.TrySetResult((HttpWebResponse)req.EndGetResponse(e));
        }, null);
    return tcs.Task;
}

但我看不出有什么比您当前的代码更好的了。

关于c# - 以异步方式启动任务的其他方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18445340/

相关文章:

asp.net-mvc - 将 CurrentUICulture 传递给 ASP.NET MVC 3.0 中的异步任务

c# - CompositionTarget.Rendering 未调用?

c# - 限制单次执行一个方法的线程数

C# 异步,没有任务等待

c# - .NET TPL 数据流源中的线程安全

c# - 没有 TaskCompletionSource 的任务链?

c# - 如何最好地访问可以运行同一方法的不同实现的静态方法?

c# - Arduino udp ping

c# - C# 中的别名关键字(如 typedef)?

javascript - 谷歌分析跟踪代码看起来既不传统也不异步