C# 多线程中使用匿名参数传递给子线程
我们在使用C#语言编写程序时进场会用到多线程,对于初学者来说给子线程传递参数是一个头疼的问题,比如Task.Factory.StartNew只允许传递一个Object类型的参数,这是我们有很多参数如何传给子线程呢?这时我们可以使用匿名参数将多个参数同时传递给子线程。
List<Task> tasks = new List<Task>(); foreach (var linkInfo in linkInfos) { tasks.Add(Task.Factory.StartNew((x) => { var a = (dynamic)x; var linkInfoInstance = (LinkInfo)a.linkInfo; var keyWordInstance = (string)a.keyWord; var collectorTaskInstance = (CollectorTask)a.collectorTask; var count = BLL.ContainerService._ArticleInfoService.GetCountWithoutCache(new ArticleInfo() { ReferencesUrl = linkInfoInstance.Url }); if (count == 0) CollectorTaskNewsTitle(linkInfoInstance, keyWordInstance, collectorTaskInstance); }, new { linkInfo = linkInfo, keyWord = keyWord, collectorTask = collectorTask })); } Task.WaitAll(tasks.ToArray());在上面的多线程编程代码中,我们定义了一个匿名参数new {},里面包含了三个参数,这三个参数是要传递给子线程的。在子线程中,我们利用C#里面的动态参数dynamic将匿名参数进行了解析,之后只用强制转换,便在子线程中获取到了匿名参数的相关实例。