bernova Ответов: 1

Вложения асинхронный/ждут функции


как показано ниже ,каковы наилучшие методы использования async/await для нескольких задач :

полукод:

public class Process
{
   public Process()
   {
       this.ProcessItem();
   }
}

  private async void ProcessItem()
   {
       while (true)
       {
           await this.FetchDeviceData(); //Read From Devices
           await Task.Delay(2000);   //300000
           await this.Process(); //Insert Into DataBase
       }
   }

   private async Task FetchDeviceData()
   {
       await Task.Run(() =>
       {
        //Read From all Devices;
       }
   }

  private async Task Process()
  {
     if (!(await RDataBase.ProcessItem(Mem,Date)))
         //Update Record;
  }

        //---------------------- RDataBase Class

  public static async Task<bool> ProcessItem(int Memb, int Date)
     {
       return await Task.Run(() =>
        {
            try
            {
            //Array List = Read Device Info From DataBase
            return True;
            }
            catch
            {
          return false;
            }
        });
     }


Что я уже пробовал:

Я вызываю экземпляр класса Process в Global.ascx в методе Application_Start ().

David_Wimbley

Зависят ли эти задачи друг от друга или не могут выполняться параллельно?

bernova

они должны выполняться одновременно

1 Ответов

Рейтинг:
1

David_Wimbley

Вот один из способов, которым вы могли бы достичь того, что я думаю, что вы хотите сделать.

 var tasks = new List<Task>();

 tasks.Add(Task.Factory.StartNew(() =>
{
   // add long running task here - 1
}));
				
 tasks.Add(Task.Factory.StartNew(() =>
{
   // add long running task here - 2
}));

Task.WaitAll(tasks.ToArray());


Вы могли бы заменить задачу.Фактор.StartNew с асинхронными вызовами методов.