【问题标题】:Task is to fast and skip method in ContinueWith()任务是在 ContinueWith() 中快速跳过方法
【发布时间】:2021-04-10 16:12:24
【问题描述】:

我有一个任务:

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() 完成。

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

【问题讨论】:

  • MyEditor 是异步的吗?如果是这样,你应该等待它。
  • 所以更新了一点描述。 MyEditor 不是异步的。
  • @Alejandro 我该怎么做?
  • 您发布的代码会覆盖相同的类级别“this.entry”。没有那个'this'它也不会工作:字符串参数的变化不会让它“出”,你的'条目'不会改变
  • 对不起,在我第二次更改后,我忘记更改整个代码 sn-p。我现在更新了。

标签: c# asynchronous task


【解决方案1】:

在您的示例中,您需要等待 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);
    }
}

【讨论】:

    猜你喜欢
    • 2023-04-02
    • 1970-01-01
    • 2018-02-02
    • 2021-04-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多