c# – 何时创建新任务
发布时间:2020-12-15 08:02:13 所属栏目:百科 来源:网络整理
导读:我正在学习C#.NET 4.5中的任务并行,我对 example有点困惑.这是我不理解的代码: public static Taskstring DownloadStringAsync(string address){ // First try to retrieve the content from cache. string content; if (cachedDownloads.TryGetValue(addre
我正在学习C#.NET 4.5中的任务并行,我对
example有点困惑.这是我不理解的代码:
public static Task<string> DownloadStringAsync(string address) { // First try to retrieve the content from cache. string content; if (cachedDownloads.TryGetValue(address,out content)) { return Task.FromResult<string>(content); } // If the result was not in the cache,download the // string and add it to the cache. return Task.Run(async () => // why create a new task here? { content = await new WebClient().DownloadStringTaskAsync(address); cachedDownloads.TryAdd(address,content); return content; }); } 具体来说,我不明白为什么他们在另一个任务中包装DownloadStringTaskAsync(). DownloadStringTaskAsync()是否已经在自己的线程上运行? 这是我编写它的方式: public static async Task<string> DownloadStringAsync(string address) { // First try to retrieve the content from cache. string content; if (cachedDownloads.TryGetValue(address,out content)) { return content; } // If the result was not in the cache,download the // string and add it to the cache. content = await new WebClient().DownloadStringTaskAsync(address); cachedDownloads.TryAdd(address,content); return content; } 两者有什么区别?哪一个更好? 解决方法
好吧,这个例子具体说明了如何使用你的第二个代码不使用的Task.FromResult.也就是说,我不同意示例中Task.Run的用法.
我这样写,我自己: public static Task<string> DownloadStringAsync(string address) { // First try to retrieve the content from cache. string content; if (cachedDownloads.TryGetValue(address,out content)) { return Task.FromResult(content); } // If the result was not in the cache,download the // string and add it to the cache. return DownloadAndCacheStringAsync(address); } private static async Task<string> DownloadAndCacheStringAsync(string address) { var content = await new WebClient().DownloadStringTaskAsync(address); cachedDownloads.TryAdd(address,content); return content; } 另请注意,该示例使用过时的WebClient,在新代码中应使用HttpClient替换. 总的来说,它看起来只是一个不好的例子IMO. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |