Skip to main content
 首页 » 编程设计

c#之使用 Task.Factory 清理电子邮件异步

2024年06月03日44jpfss

我想做的是让我的代码获取电子邮件列表并将每个电子邮件提供给服务以异步验证其是否有效。

我使用的服务是 Cobisi .NET Email Verify允许您通过调用其基于任务的异步 API 来验证电子邮件是否对各种验证级别有效。

使用这篇博文 (http://www.hanselman.com/blog/BackToParallelBasicsDontBlockYourThreadsMakeAsyncIOWorkForYou.aspx) 我认为我的代码将异步验证我的电子邮件列表并返回一个 Task 数组,表示通过验证的电子邮件,但是我不确定如何使用这个数组在 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 */ }); 

有没有办法在我的评论 block 中放置一些代码来构建一个新的干净电子邮件集合或将它们添加到预先构建的集合中?有没有更好的方法来完成我想做的事情?

请您参考如下方法:

重写 fork-join 以使用 await,一切再次变得简单:

var tasks = 
  (from email in cleanEmailList1 select ValidateEmailCleanAsync(email)).ToArray(); 
 
await Task.WhenAll(tasks); 
 
ProcessTasks(tasks); 

ProcessTasks 可以是您喜欢的任何内容。