【问题标题】:Calling async function in sync method in PCL in Xamarin Forms在 Xamarin Forms 的 PCL 中的同步方法中调用异步函数
【发布时间】:2015-08-05 13:52:46
【问题描述】:

我有这个功能:

public async Task<string> GetData() 
{
    var httpClient = new HttpClient();
    HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Get, "My Link Here...");
    var response = await httpClient.SendAsync(request);
    string value = await response.Content.ReadAsStringAsync ();
    return value;
}

它从 webapi 获取数据,然后我必须使用该数据在 Xamarin Forms 中使用 Steema Teechart 构建图表。问题是我无法在构建图表的类中调用函数 GetData(),因为我要使用数据的方法不是异步的。我应该如何调用 GetData() 并使用字符串?

我试过了:

Task<string> s = GetData ();
s.Wait ();
string initialValues = s.Result;

但它会停止我的应用程序并在一段时间后崩溃。

【问题讨论】:

标签: c# asynchronous async-await xamarin.forms portable-class-library


【解决方案1】:

问题是我无法在构建图表的类中调用函数 GetData(),因为我要使用数据的方法不是异步的。我应该如何调用 GetData() 并使用字符串?

你调用方法async然后使用await

string initialValues = await GetData();

是的,这意味着你的调用方法也需要返回一个Task/Task&lt;T&gt;,也就是说它的调用方法也应该是async等等。这个“增长” async 非常自然。

【讨论】:

  • 是的,但是我想要使用数据的方法返回一个模型,我必须使用它来构建图表,并且异步方法应该是无效的或返回某种任务,这不会不适合我..
  • @IliaStoilov:那么你的返回类型应该是Task&lt;MyModelType&gt;
猜你喜欢
  • 2014-09-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-03-19
  • 1970-01-01
  • 2017-04-08
  • 1970-01-01
相关资源
最近更新 更多