【问题标题】:How to use continue with Task in C# in If condition如何在 If 条件下使用 C# 中的任务继续
【发布时间】:2016-06-30 07:41:11
【问题描述】:

我已经在我的 .NET 应用程序中实现了 wcf 客户端。我的问题是如何确保在 Task> 完成后调用 if 条件?

  private List<MarketingCampaign> _GetAllCampaignTypeList()
    {
        List<MarketingCampaign> _MarketingCampaignList = null;

        Task<List<MarketingCampaignTypeData>> _MarketingCampaignTypeDataList = _MarketingCampaignTypeClientObject.GetAllCampaignTypes();

        ??? // how can I use continue with or Task.wait all in following if condition

        if(_MarketingCampaignTypeDataList!=null)
        {
           // code
        }

        return _MarketingCampaignList;
    }

上面的代码调用了下面的类

  public async Task<List<App.Client.Proxies.MarketingCampaignTypeServiceRef.MarketingCampaignTypeData>> GetAllCampaignTypes()
    {

        var task  = Task<List<App.Client.Proxies.MarketingCampaignTypeServiceRef.MarketingCampaignTypeData>>.Factory.StartNew(() => {
                                            return _MarketingCampaignTypeClient.GetAllCampaignTypes();
                                      });

        return await task.ConfigureAwait(false);

    }

【问题讨论】:

  • 你试过await _MarketingCampaignTypeDataList吗?
  • 使用 .ContinueWith 并将您的支票“if(_MarketingCampaignTypeDataList!=null)”放入 .ContinueWith
  • 我是这个线程编程的新手,所以我不确定下一步该怎么做
  • 我确实在调用类中等待,但不是我从哪里调用
  • 为什么要检查任务是否为空?它不能为空,因为您在当前范围内创建了它

标签: c# wcf asynchronous async-await


【解决方案1】:

我相信你需要这样的东西:

async Task<List<MarketingCampaign>> GetAllCampaignTypeList()
{
    List<MarketingCampaign> campaignList = null;

    List<MarketingCampaignTypeData> campaignTypeList = await _MarketingCampaignTypeClientObject.GetAllCampaignTypes();

    if(campaignTypeList != null)
    {
       // do whatever you need to convert campaignTypeList to campaignList
    }

    return campaignList;
}

另外,GetAllCampaignTypes 方法中不需要await,只需返回任务即可。我建议你不要在没有正当理由的情况下使用Task.Factory.StartNew。改用Task.Runhttp://blog.stephencleary.com/2013/08/startnew-is-dangerous.html

【讨论】:

  • 在等待_MarketingCampaignTypeClientObject.GetAllCampaignTypes();它说无法将系统集合转换为任务
  • 也许 GetAllCampaignTypes 返回列表不是任务?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-03-08
相关资源
最近更新 更多