惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

S
SegmentFault 最新的问题
G
Google Developers Blog
H
Help Net Security
月光博客
月光博客
阮一峰的网络日志
阮一峰的网络日志
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
P
Proofpoint News Feed
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
B
Blog RSS Feed
爱范儿
爱范儿
酷 壳 – CoolShell
酷 壳 – CoolShell
博客园 - 三生石上(FineUI控件)
大猫的无限游戏
大猫的无限游戏
人人都是产品经理
人人都是产品经理
GbyAI
GbyAI
D
Docker
Hugging Face - Blog
Hugging Face - Blog
I
InfoQ
博客园 - 司徒正美
Last Week in AI
Last Week in AI
Microsoft Security Blog
Microsoft Security Blog
美团技术团队
Stack Overflow Blog
Stack Overflow Blog
M
MIT News - Artificial intelligence

博客园 - 超薄

符号执行虚假控制流去混淆 ios 重启usb ubuntu 搜狗输入法安装 js 反hook js 源码乱码 js和html加上混淆 js 字体加密 jj混淆 webpack 暴力方式扣取 志远js调试相关 事件模式实现通知 扩展属性应用 位运算应用口诀和实例(转自大笨狼) 数据结构实际应用----订单排序(堆排序求前N大) 数据结构Tire 树实际应用----过滤禁词 动态规划 快速排序算法 字典 DictionaryBase 和 SortedList 模式匹配文本处理 位运算
并行算法中的异常
超薄 · 2012-04-04 · via 博客园 - 超薄
   public  class AsyncTask
{
public void TestMethod()
{
List<string> Listone = new List<string> { "url2","url","urle"};
//var results = from url in Listone.AsParallel()
// select new WebClient().DownloadData(url);
//results.ForAll(result=>Userresult(result));
try
{
Listone.RunAsync(url => StartDownload(url), task => FinishDownLoad(task.AsyncState.ToString(), task.Result));
}
catch(AggregateException problems)
{
var handers = new Dictionary<Type, Action<Exception>>();
handers.Add(typeof(Exception),ex=>Console.WriteLine(ex.Message));
if (!HandleAggregateError(problems, handers))
throw;
}

}
private static bool HandleAggregateError(AggregateException aggregate,Dictionary<Type,Action<Exception>> exceptionHanders)
{
foreach(var exception in aggregate.InnerExceptions)
{
if (exception is AggregateException)
return HandleAggregateError(exception as AggregateException, exceptionHanders);
else if (exceptionHanders.ContainsKey(exception.GetType()))
{
exceptionHanders[exception.GetType()](exception);
}
else
return false;

}
return true;
}

private void Userresult(byte[] result)
{
return;
}
private static void FinishDownLoad(string url,byte[] bytes)
{
Console.WriteLine("Read{0} byes from {1}",bytes.Length,url);
}
private static Task<byte[]> StartDownload(string url)
{
var tcs = new TaskCompletionSource<byte[]>(url);
var wc = new WebClient();
wc.DownloadDataCompleted += (sender, e) =>
{
if (e.UserState == tcs)
{
if (e.Cancelled)
{
tcs.TrySetCanceled();
}
else if (e.Error != null)
{
if (e.Error is WebException)
tcs.TrySetResult(new byte[0]);
else
tcs.TrySetException(e.Error);
}
else
tcs.TrySetResult(e.Result);
}

};

wc.DownloadDataAsync(new Uri(url),tcs);
return tcs.Task;
}
}
public static class MyExtenion
{
public static void RunAsync<T, TResult>(this IEnumerable<T> taskParms, Func<T, Task<TResult>> tasStarter, Action<Task<TResult>> taskFinisher)
{
taskParms.Select(parm => tasStarter(parm)).AsParallel().ForAll(t => t.ContinueWith(t2 => taskFinisher(t2)));

}
}