-1

これまでのところ、2つの大きなファイルを並行してロードする必要があります

以下のコードはクリックボタンメソッドです

private async void MILoadLogFile_Click(object sender, RoutedEventArgs e) 
{       
    ...
    if (oFD.ShowDialog() == true)
    {
        await myLogSession.LoadCompassLogAsync(oFD.FileName);
        await myLogSession.LoadCoreServiceLogAsync(oFD.FileName);
    }
}

ロード方法:

public async Task LoadCompassLogAsync(String fileName)
{
    StreamReader streamReader = new StreamReader(fileName);
    if (fileName.Contains("Compass"))
    {
        ...
        try
        {
            using (streamReader)
            {
                //Console.Out.WriteLine("lineCount: " + lineCount);
                while (((line = await streamReader.ReadLineAsync()) != null)
                       && !CompassLogLoadCompleted)
                {
                    ...
                    loggingLvl = new LoggingLvl(eLoggingLvl);
                    CompassLogData cLD = new CompassLogData(id, dateTime, loggingLvl, threadId, loggingMessage);

                    await addRoCompassLogCollectionAsync(cLD);
                }
            }
        }
        catch (Exception e)
        {
            Console.WriteLine("The file could not be read:");
            Console.WriteLine(e.Message);
        }
    }
}

LoadCoreServiceLogAsyncとほぼ同じですLoadCompassLogAsync

2 つの読み込み方法が順番に実行されます。それらを並行して実行したい。

4

1 に答える 1

1

コードは次々にタスクを実行します。2つのタスクを並行して実行するには、次のTask.WaitAll方法を使用できます。

var loadCompassLogTask = myLogSession.LoadCompassLogAsync(oFD.FileName);
var loadCoreServiceLogTask = myLogSession.LoadCoreServiceLogAsync(oFD.FileName);
Task.WaitAll(loadCompassLogTask, loadCoreServiceLogTask);

または、使用したい場合は、以下を使用awaitできますTask.WhenAll

var loadCompassLogTask = myLogSession.LoadCompassLogAsync(oFD.FileName);
var loadCoreServiceLogTask = myLogSession.LoadCoreServiceLogAsync(oFD.FileName);
await Task.WhenAll(loadCompassLogTask, loadCoreServiceLogTask);
于 2013-02-06T11:16:08.577 に答える