【问题标题】:Threadpool different return results? [duplicate]Threadpool 不同的返回结果? [复制]
【发布时间】:2020-08-10 06:41:46
【问题描述】:

我将如何从我在任务列表中运行的任务池返回两种不同类型的结果?在我的代码中,我想在任务池的帮助下同时在 startCategorysearchAsync 中运行两种不同的方法,但是它们具有不同的返回值,一个带有类别返回参数,一个带有 SubCategoryReturnmparameter SubCategory 是 Category 的子项吗?这是我的代码

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Threading;
using System.Windows.Input;
using DataConverter.Checkers;
using DataConverter.Converters;
using DataConverter.Command;
using DataConverter.Objects;
using AsyncAwaitBestPractices.MVVM;

namespace DataConverter.ViewModels
{
    public class MainWindowViewModel : BaseViewModel
    {

        public List<Category> parentCategories = new List<Category>();
        public List<SubCategory> subCategories1 = new List<SubCategory>(); 


        public string path { get; set; }

       public bool runButtonWorks { get; set; }
       public string errorMessage { get; set; }

       public bool TextIsVisible { get; set; }

       public ICommand run { get; set; }
       private bool _isBusy;
       public bool IsBusy
       {
          get => _isBusy;
          private set => Set(ref _isBusy, value);
       }

        private void Set(ref bool isBusy, bool value)
        {
            throw new NotImplementedException();
        }

        public AsyncCommand start { get; private set;}
       public MainWindowViewModel()
       {
            runButtonWorks = true; 

            start = new AsyncCommand(startCategorysearchAsync);
            start = new AsyncCommand(startSubCategorysearchAsync);




       }
        private async Task startCategorysearchAsync()
        {
            FileCheck check = new FileCheck(path);
            List<List<SubCategory>> subCategoriesList = new List<List<SubCategory>>();
            List<Task> tasks = new List<Task>(); 

            CategoryConverter converter = new CategoryConverter(path);

            try
            {
                runButtonWorks = false;
                tasks.Add(Task.Run(() =>  converter.getCategoryListExcel()));
                tasks.Add(Task.Run(() => converter.getSubCategory()));

                await Task.WhenAll(tasks); 

            }
            finally
            {

            }








        }

        private bool CanExecuteSubmit()
        {
            return !IsBusy;
        }



    }
}

【问题讨论】:

    标签: c# list async-await task


    【解决方案1】:

    最简单的方法是让他们返回各自的结果,并将其与Task.WhenAll(...) 结合起来。

    var taskCategoryList = Task.Run(() =>  converter.getCategoryListExcel());
    var taskSubCategory = Task.Run(() => converter.getSubCategory());
    
    await Task.WhenAll(taskCategoryList, taskSubCategory);
    
    var resultCategoryList = await taskCategoryList;
    var resultSubCategory = await taskSubCategory;
    
    

    【讨论】:

      猜你喜欢
      • 2021-06-29
      • 2013-07-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-09-03
      • 2016-03-31
      • 2019-01-18
      • 2012-11-30
      相关资源
      最近更新 更多