【问题标题】:How to await a slow synchronous function within a c# async function如何在 c# 异步函数中等待慢速同步函数
【发布时间】:2022-07-06 22:34:30
【问题描述】:

我有一个异步函数,它调用一个慢速同步函数(返回一个布尔值)。我想从任务/线程中调用慢速同步函数并让异步函数等待其完成。如何才能最简单/优雅地做到这一点?

(总而言之,您可以说我正在尝试等待一个同步函数,如果不将其调用放在任务/线程中,这当然无法完成。)

我目前所拥有的,我认为应该可以做得更好:

public async void AsyncFunction()
{
    var task = Task.Factory.StartNew(() => SlowFunction());
    await task;
    var retVal = task.Result;
}

【问题讨论】:

  • await Task.Run?不确定我是否理解问题,请说明您尝试过的内容以及您自己的尝试没有奏效的地方
  • await Task.Run 很少是正确的选择,除非您知道您当前处于 UI 线程之类的东西上并且您正试图将处理转移到其他地方。 Task.Run == "请找一些其他线程来运行这段代码"。 await == “在该任务完成之前,该线程没有任何用处”——当前线程可以很容易地成为“其他线程”并直接运行代码。
  • 没有理由这样做。如果您无论如何都必须等待其他任务,那么额外的线程是没有意义的。把它放在一个单独的线程中并不会让它运行得更快。

标签: c#


【解决方案1】:

如何在 c# 异步函数中等待慢速同步函数:

public async Task<bool> ACSharpAsyncFunction()       // within a c# async function
{
    return await Task.Run(ASlowSynchronousFunction); // await a slow synchronous function
}

private bool ASlowSynchronousFunction()
{
    //
    // slow stuff
    //
    return false;
}

不客气。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-10-20
    • 2018-09-29
    • 2021-08-28
    • 2017-04-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多