我想做的是让我的代码获取电子邮件列表,并将每个电子邮件提供给服务,以便异步验证为有效。
我正在使用的服务是Cobisi .NET Email Verify,它允许您通过调用基于任务的异步API来验证电子邮件是否对各种验证级别有效。
使用此博客文章(http://www.hanselman.com/blog/BackToParallelBasicsDontBlockYourThreadsMakeAsyncIOWorkForYou.aspx)我认为我的代码将异步验证我的电子邮件列表并返回一个Task< bool>表示通过验证的电子邮件,但是我不确定如何在Task.Factory.ContinueWhenAll()中使用此数组来返回一组干净的电子邮件。
到目前为止,这是我的代码
异步电子邮件验证方法:
public async Task<bool> ValidateEmailCleanAsync(string email)
{
using (var _engine = new VerificationEngine())
{
var verification = new Verification(email);
await _engine.RunAsync(verification, VerificationLevel.CatchAll);
return verification.State.Result.LastStatus == VerificationStatus.Success; //returns true if validation is passed or false if not
}
}
任务工厂验证电子邮件:
Task.Factory.ContinueWhenAll(
(from email in cleanEmailList1 select ValidateEmailCleanAsync(email)).ToArray(),
completedTasks => { /* Create New String Collection For Clean Emails */ });
有没有办法放入一些代码,我的注释块要么构建一个干净的电子邮件新集合,要么将它们添加到预先构建的集合中?有没有更好的方法来完成我想要做的事情?
答案 0 :(得分:3)
重写fork-join以使用await,一切都变得简单了:
var tasks =
(from email in cleanEmailList1 select ValidateEmailCleanAsync(email)).ToArray();
await Task.WhenAll(tasks);
ProcessTasks(tasks);
ProcessTasks
可以是您喜欢的任何内容。