Sumith Peringathara Ответов: 1

Что бы быть лучший подход, чтобы выполнить метод несколько раз, параллельно с#


Привет,

Я хотел бы получить несколько советов от экспертов здесь по одному из моих требований.
Мне нужно провести несколько тестов на устройствах, подключенных к моей системе. Мое приложение должно запускать метод тестирования параллельно для всех подключенных устройств одновременно и получать результат от каждого устройства. Я написал метод для теста, в котором я могу передать идентификатор устройства и должен получить результат теста после завершения теста каждого устройства.

Пожалуйста, дайте мне знать, какой способ лучше всего реализовать это. В моем случае этот процесс синхронен, и я использую C#/WPF.

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

public data[] SomeMethod()
{
  return Enumerable.Range(0, 10)
      .AsParallel().AsOrdered()
      .Select(DeviceTestMethod).ToArray();
}

1 Ответов

Рейтинг:
5

George Swan

Я бы использовал async await фреймворк для асинхронного запуска тестов.
Код а Device класс, способный запускать TestDevice метод асинхронный. Что-то вроде этого.


public class Device
   {
       public async Task<Data[]> TestDeviceAsync()
       {
           //run the TestDevice method asynchronously
           return await Task.Run(() => TestDevice());
       }

       private Data[] TestDevice()
       {
           //test device and return results
           return new Data[6];
       }

   }

Затем создайте экземпляр a TestManager класс для выполнения необходимых тестов.


public class TestManager
   {
       public async Task TestDevicesAsync()
       {
           var tasks = new List<Task<Data[]>>();
           for (int i = 0; i < 6; i++)
           {
               var device = new Device();
               //start each task off but don't await it
               //tasks are started by simply invoking the async method
               Task<Data[]> task = device.TestDeviceAsync();
               tasks.Add(task);
           }
           //await  for all theTasks to finish
           Data[][] testResults = await Task.WhenAll(tasks);
           foreach (var dataArry in testResults)
           {
               //do something with the results


           }
       }

   }