1

Я новичок в использовании программирования await/async и windows phone 8.1. Мне нужно запустить метод асинхронного моделирования в более чем одном потоке. Может быть четыре, потому что мой телефон имеет четыре ядра. Но я не могу понять его :-(Как запустить метод async несколько раз в отдельных потоках?

Это пример моего метода асинхронного.

public async Task GetFilesAsyncExample(StorageFolder root) 
{ 
     IReadOnlyList<StorageFolder> folders = await root.GetFoldersAsync(); 
     //DO SOME WORK WITH FOLDERS// 
} 

Четыре нити может быть обеспечена путем использования семафоров объекта, но как я могу запустить его в simulatously запущенных потоков ?

EDIT:. Это мой код, который исследует структуру папок и журналы метаданные файлов в базу данных Я хочу, чтобы ускорить выполнение этого кода, вызвав метод «асинхронной LogFilesFromFolderToDB (папка StorageFolder)» simulateously в отдельном потоке для каждой папки.

Stack<StorageFolder> foldersStack = new Stack<StorageFolder>(); 
      foldersStack.Push(root); 
      while (foldersStack.Count > 0) 
      { 
       StorageFolder currentFolder = foldersStack.Pop(); 
       await LogFilesFromFolderToDB(null, currentFolder);// Every call of this method can be done in a separate thread. 
       IReadOnlyList<StorageFolder> folders = await currentFolder.GetFoldersAsync(); 
       for (int i = 0; i < folders.Count; i++) 
        foldersStack.Push(folders[i]); 
      } 

Метод: асинхронная LogFilesFromFolderToDB (StorageFolder папки) выглядит следующим образом:

async Task LogFilesFromFolderToDB(StorageFolder folder) 
    { 
     IReadOnlyList<StorageFile> files = await folder.GetFilesAsync(); 
     //SOME ANOTHER CODE// 
    } 
+1

Что вы пытаетесь сделать, и почему вы хотите, чтобы запустить его одновременно? –

+1

вы можете использовать Parallel.ForEach (папки, (currentFolder) => {/// Ваш код}) –

ответ

0

Parallel.Foreach может помочь решить эту проблему.

Попробуйте следующий код,

public async Task GetFilesAsyncExample(StorageFolder root) 
    { 
     IReadOnlyList<StorageFolder> folders = await root.GetFoldersAsync(); 

     Parallel.ForEach(folders, (currentFolder) => 
     { 
      Console.WriteLine("folder name:" + currentFolder.Name + " Files count" + currentFolder.GetFiles().Count()); 
     }); 
     //DO SOME WORK WITH FOLDERS// 
    } 
+0

Я думаю, что это не может мне помочь. Мне нужно вызвать simulateously метод GetFilesAsyncExample() не перебирать коллекцию папок. – Josef

+0

Здесь, когда вы используете Parallel, он будет запускать ваш код одновременно с доступными ядрами на вашем компьютере. Пожалуйста, следуйте MSDN для Parallel.Foreach –

Смежные вопросы