【问题标题】:Why I cannot "await" an Async method from Atlassian SDK?为什么我不能“等待”来自 Atlassian SDK 的异步方法?
【发布时间】:2018-10-24 16:09:00
【问题描述】:

我正在拼命尝试运行以下代码:

var ad = jira.Issues.GetIssuesFromJqlAsync("PROJECT = MyProject AND ISSUETYPE = DEFECT");

方法的签名是Task<IPagedQueryResult<Issue>> (documentation link)

该方法应该是异步的,但我不能使用“等待”(我收到该方法需要用异步标记并返回任务的错误..)。我可以通过调用ad.start() 来执行它,但这不是异步的。 我该怎么做才能解决这个问题?

【问题讨论】:

  • 您调用它的方法是否标有async
  • @Servy Straight from the docs: "await can only be used in an asynchronous method modified by the async keyword." OP 说他们不能使用 await 这让我觉得这段代码所在的方法没有标记async
  • @Servy 你不等待Tasks 吗?所以如果GetIssuesFromJqlAsync返回一个Task,那么它应该是可等待的,正如maccettura所说,包含此代码的方法需要标记为async
  • 请发送minimal reproducible example。还有,GetIssuesFromJqlAsync的签名是什么?
  • @Servy 但it does,它专门返回一个Task<IPagedQueryResult<Issue>>

标签: c# asynchronous sdk


【解决方案1】:

标记你的方法异步。如果你不需要回报,它就不需要成为一项任务,

它应该看起来像:

public async Task<string> YourMethod()
{
    var ad = await jira.Issues.GetIssuesFromJqlAsync("PROJECT = MyProject AND ISSUETYPE = DEFECT");
    return ad.ToString();
}

如果您想要退货,或者:

async Task MyMethodAsync()
{
  var ad = await jira.Issues.GetIssuesFromJqlAsync("PROJECT = MyProject AND ISSUETYPE = DEFECT");

}

更深入的解释是docs...

【讨论】:

  • 该方法应该返回Task。
  • 不是绝对的,只是不能作废,但如果你坚持
  • 它可以是无效的,但它可能不应该是。
  • 两者都对,最好有一个空任务。你只是并不绝对需要回报。
  • 这可能是 OP 问题的解决方案。有关更多信息@John V:请参阅stackoverflow.com/questions/42624647/…。注意:您可能需要在调用链的整个过程中使用 async / await 方法 - 请参阅 Stephen Cleary 关于 async 和 await 的这篇内容丰富的文章:msdn.microsoft.com/en-us/magazine/jj991977.aspx
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-05-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-08-30
相关资源
最近更新 更多