首页 > 解决方案 > 任务是在 ContinueWith() 中快速跳过方法

问题描述

我有一个任务:

public void Main (String[] args)
{
       DoMethod();
}

public void DoMethod()
{
    Task<TResult> myTask = StartAsync();
    
    myTask.ContinueWith(x =>
    {
        Console.WriteLine("Something");
    
        //Do some stuff
        
        foreach (var entry in entries)
        {
            MyEditor(entry);
        }
    
        //Do some stuff
    });
}

public void MyEditor(string entry)
{
    this.entry = entry.Remove(0, 5);
}

但是这个任务有点太快了。

MyEditor 方法只是格式化条目。

我的任务不等待MyEditor()完成格式化。 MyEditor()不是异步的。

我如何修改一点以等待MyEditor()完成。

我已将代码减少到必要的最小值,以便仍然可以识别问题。我希望我成功了。

标签: c#asynchronoustask

解决方案


在您的示例中,您需要等待 mytask。如果您处于异步上下文中,则可以执行以下操作:

async Task Main()
{
    List<string> entries = await StartAsync();
    
    var formattedEntries = entries.Select(e => MyEditor(e));

    foreach (var entry in formattedEntries)
    {
        Console.WriteLine(entry);
    }
}

string MyEditor(string entry)
{
    return entry.ToUpper();
}

Task<List<string>> StartAsync()
{
    return Task.FromResult(new List<string>{"a","b"});
}

或将代码更改为:

void Main()
{
    List<string> entries = StartAsync().Result;
    
    var formattedEntries = entries.Select(e => MyEditor(e));

    foreach (var entry in formattedEntries)
    {
        Console.WriteLine(entry);
    }
}

推荐阅读