【发布时间】:2017-11-23 17:16:05
【问题描述】:
当代码消失并调用 azure 时,我正在使用活动指示器向用户显示。 调用本身工作正常,一切正常,但活动指示器加载一段时间后,我试图阻止用户的相同延迟仍然发生,然后下一个屏幕加载。 我可能应该澄清一下,我对 Xamarin 比较陌生,而且很多这种 async/await 的东西都暗示了我。 我已将 API 调用放入 Task 中,并在其中放置了一个名为 sleep 的等待方法,该方法运行大约 4 秒。这是我可以让它运行活动指示器的唯一方法。但看起来这也是导致问题的原因,所以总结一下我被卡住了。 我希望在活动指示器运行时调用 Azure,然后在它们返回打开下一页时进行,以防止页面滞后和冻结。它看起来不太好。 所以,这是调用 API 的方法:
private async Task HandleSubmitCommand()
{
//if (IsLoading) return;
IsLoading = true;
await Sleep();
if (!string.IsNullOrEmpty(IdentityDriver))
{
_entryFieldType = "oid";
_statusResponse = DependencyService.Get<IWebService>().Login(_entryFieldType, IdentityDriver, App.TenantId.Value.ToString());
IsLoading = false;
}
else
{
_entryFieldType = "rid";
_statusResponse = DependencyService.Get<IWebService>().Login(_entryFieldType, IdentityRoute, App.TenantId.Value.ToString());
}
if (_statusResponse == "True")
{
Application.Current.MainPage = new DriverDashboardView();
}
else
Application.Current.MainPage = new NotFoundView();
}
这是睡眠方法:
private Task Sleep()
{
return Task.Delay(4000);
}
这是调用 API 的 Login 方法:
public string Login(string ID, string IDPayload, string TenantID)
{
//await Sleep();
var BaseURL = App.ConFigURL;
var URI = string.Format(BaseURL, TenantID);
using (var httpClient = new HttpClient(new HttpClientHandler()))
{
httpClient.BaseAddress = new Uri(URI);
var Telemetry = new { typeid = ID , id = IDPayload};
var Payload = JsonConvert.SerializeObject(Telemetry);
var SAS = DependencyService.Get<ISasToken>().CreateToken(URI, "RootManageSharedAccessKey", "#####################################");
httpClient.DefaultRequestHeaders.TryAddWithoutValidation("Authorization", SAS);
var Content = new StringContent(Payload, Encoding.UTF8, "application/json");
var Response = httpClient.PostAsync(URI,Content).Result;
return Response.IsSuccessStatusCode.ToString();
}
}
正如我所说,对 Azure 的调用很好,但它似乎并没有异步运行。我对 async/await 一点也不满意,这于事无补。 一个想法?
【问题讨论】:
标签: c# azure asynchronous xamarin xamarin.forms