【问题标题】:What's a sync and async method?什么是同步和异步方法?
【发布时间】:2020-07-14 15:27:47
【问题描述】:

什么是同步方法,什么是异步方法?同步和异步方法有什么区别?我什么时候必须使用同步或异步方法? 我问这些问题是因为我不明白:

public async void ReadData(filepath)
{
    CreateDoc("hello");    //<------ Why I can't do that ?
}

public void CreateDoc(string astring)
{
    Debug.WriteLine(astring);
}

为什么我不能这样做? :

public async void ReadData(filepath)
{
     var BarreDroite = new string[] { "|" };
     foreach (string tableArret in items.Split(BarreDroite, StringSplitOptions.RemoveEmptyEntries))
     {
         listeArret.Add(tableArret); //<---- Here appear the problem.
     }
{

我问这个问题是因为我在网上找不到明确的解释。

【问题讨论】:

  • 我假设您找到了 something,那么到目前为止您发现了什么?你到底在这里问什么? a/sync 之间的区别或如何修复代码中的错误
  • 我怀疑真正的问题是“为什么我的异步 void 方法不起作用”。因为它们应该只用于事件处理程序。已经有很多关于它的帖子了,我们不需要另一个。感谢您尝试贡献。
  • 汉斯,除了事件处理程序之外,await 还有很多用途。
  • 最好换个问题兄弟
  • 如果一个方法是async,它应该返回一个Task

标签: c# asynchronous synchronous


【解决方案1】:

函数和其他操作在“线程”上运行。线程只是一串操作,但一次可以有多个线程。在某些方面,最重要的线程是主线程,通常称为 UI 线程,因为这是控制用户界面的地方。

在执行冗长的操作(例如从 Internet 获取数据)时,您不希望在主线程上等待该数据,因为您将“阻止”该线程响应用户输入(例如,单击取消按钮)

为了解决这个问题,您将长时间运行的任务放在它自己的线程上。 C# 使这变得简单,您只需使用 await 关键字,该函数将等待工作完成而不会阻塞主线程。

单词 await 是一个“关键字”——它的用途是为此目的而保留的。为了表示一个函数中有一个 await,你必须用 async 标记这个函数。如果您将其标记为异步,编译器将期望至少有一个等待。

你的例子:

public async void ReadData(filepath)
{
    CreateDoc("hello");    //<------ Why I can't do that ?
}

您已将此方法标记为异步,但您没有任何等待

希望对你有帮助

杰西

【讨论】:

    【解决方案2】:
    1. 同步表示两个或多个操作在同一个中运行 上下文(线程),以便一个人可以阻止另一个人。
    2. 同步意味着两个或多个操作顺序发生。
    3. 异步表示两个或多个操作在不同的地方运行 上下文(线程),以便它们可以同时运行并且不会阻塞 彼此。
    4. 异步是指两个或多个操作异步发生。

    您可以在以下线程中阅读更多信息: http://www.codeproject.com/Articles/127660/What-are-actually-synchronous-asynchronous-operati

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-01-19
      • 2015-05-31
      • 2019-06-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-02-24
      • 2011-11-30
      相关资源
      最近更新 更多