可以在最终等待之前从异步方法返回吗?

时间:2017-12-08 15:57:32

标签: c# asynchronous async-await

我有一个在类中调用异步方法的网页(aspx)。 async方法看起来像这样:

{% extends "buylist/header.html" %}

{% block content %}

    <table class="table">
  <thead class="thead-inverse">
    <tr>
      <th>#</th>
      <th>Name</th>
      <th>Price</th>
      <th>Quantity</th>
    </tr>
  </thead>

      # For loop getting data from card_data is here
  {% for c in card_data %}
    {{c}}
  {% endfor %}
</table>
{% endblock %}

如果满足条件,我不需要上次存储库调用的数据。最终等待之前的回报是否会引起我的问​​题?

我问的原因是我在服务器应用程序日志中收到此错误,并且我正在寻找原因...

public async Task<MyThing> GetMyThing()
{
    MyThing thing = new MyThing();
    var stuff = await Repository.GetStuff();
    // apply stuff to thing.

    var morestuff = await Repository.GetMoreStuff();
    // apply more stuff to thing.

    if (someCondition)
    {
        return thing;
    }

    var yetMoreStuff = await Repository.GetYetMoreStuff();
    // apply yet more stuff

    return thing;
}

1 个答案:

答案 0 :(得分:7)

是的,不运行某些异步操作完全没问题。你有什么好。什么会如此之好:

async

即。跨越返回的{{1}}操作。这具有不太明显和可预测的行为,尤其是在同步环境环境中。

你的问题不太可能是因为回归。听起来这只是您的数据代码中发生的NRE,它正在同步上下文回调中出现。