Клиентский запрос Azure Mobile Service не возвращает управление клиентскому приложению Xamarin Form android

Я использую Azure Mobile Service с Android-приложением Xamarin Form, чтобы в основном запрашивать данные из хранилища таблицы azure.

Нынешняя проблема, с которой я столкнулся, заключается в том, что лазурный клиент мобильной службы не возвращает управление сразу после вызова API-клиента мобильного сервиса (это имело место только в случае с библиотекой классов Portable and android app, но тот же результат возвращает результат В обычной библиотеке .net, поскольку я использовал тестовый проект для проверки API).

Исходный код, который я использовал следующим образом:

Azure Mobile Service код:

public class VerticalFarmController : TableController<VerticalFarm> { protected override void Initialize(HttpControllerContext controllerContext) { base.Initialize(controllerContext); MobileServiceContext context = new MobileServiceContext(); string connectionString = "My_StorageConnectionString"; DomainManager = new StorageDomainManager<VerticalFarm>(connectionString, "VerticalFarm", Request, Services); } public Task<IEnumerable<VerticalFarm>> GetAllVerticalFarm(ODataQueryOptions queryOptions) { return base.QueryAsync(queryOptions); } } 

Код приложения для Android Xamarin Form:

 public class MainActivity : global::Xamarin.Forms.Platform.Android.FormsApplicationActivity { private const string ApiUrl = "[Mobile service Url]"; private const string AppKey = "[Application key]"; protected override void OnCreate(Bundle bundle) { base.OnCreate(bundle); global::Xamarin.Forms.Forms.Init(this, bundle); IMobileServiceClient mobileServiceClient = new MobileServiceClient(ApiUrl, AppKey); try { var table = mobileServiceClient.GetTable("verticalfarm"); var result = table.ReadAsync("$top=10", null, wrapResult: true).Result; } catch (Exception ex) { System.Diagnostics.Debug.WriteLine(ex.ToString()); } LoadApplication(new App()); } } 

Он не возвращает результат или исключение сразу после выполнения следующей строки кода:

 var result = table.ReadAsync("$top=10", null, wrapResult: true).Result; 

Было бы здорово знать, есть ли у кого-то подобная проблема и они могут ее решить.

Вызов. Результат, подобный приведенному ниже, вызовет тупик

 var result = table.ReadAsync("$top=10", null, wrapResult: true).Result; 

У меня была такая же проблема с вызовом MobileServicesClient.InvokeApiAsync ()

Вместо этого вы должны ждать:

 async Task ReadTable() { var result = await table.ReadAsync("$top=10", null, wrapResult: true); // do something with result } 

Или в моем случае

 async Task CallApi() { var response = await App.client.InvokeApiAsync ("/api/call", System.Net.Http.HttpMethod.Get, null); // do something with response } 

Поведение, которое вы экспериментируете, является нормальным, так как ReadAsync является асинхронным методом. Чтобы «дождаться» завершения вызова, вам нужно использовать ключевое слово ожидания.

Var result = wait table.ReadAsync ("$ top = 10", null, wrapResult: true) .Result;

Вы можете больше узнать о поддержке async в Xamarin, прочитав эту документацию Xamarin: http://developer.xamarin.com/guides/cross-platform/advanced/async_support_overview/