使用Task.Factory同步清理邮件

本文关键字:同步 Task Factory 使用 | 更新日期: 2023-09-27 18:03:33

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

我使用的服务是Cobisi . net Email Verify,它允许你通过调用他们的基于任务的异步API来验证电子邮件是否有效。

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

是否有一种方法可以放入一些代码,我的评论块是建立一个新的干净的电子邮件集合或将它们添加到预构建的集合?有没有更好的方法来完成我想做的事情?

使用Task.Factory同步清理邮件

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

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

ProcessTasks可以是任何你喜欢的