私はメインのUIスレッドからAPIコールを処理するための2つの異なるアプローチを考え出しました。どちらがパフォーマンスやリソース割り当ての面で優れているのでしょうか。これらはAndroid固有の例ですが、iOSと同様の設定をしていますので、クロスプラットフォームでの検討が必要です。最高のバックグラウンド処理/ API呼び出しのアプローチですか?
オプション1 - 要求のために新しいスレッドをキックオフし、UIスレッドでコールバックに応答を処理する:
apiTestButton.Click += delegate
{
progressBar1.Visibility = ViewStates.Visible;
new Thread(new ThreadStart(() =>
{
string response = Core.BLL.API.GetJsonTest();
RunOnUiThread(() => ApiTestCallback(response));
})).Start();
};
void ApiTestCallback(string response)
{
progressBar1.Visibility = ViewStates.Invisible;
Toast.MakeText(this.ApplicationContext, "API response: " + response, ToastLength.Long)
.Show();
}
オプション2 - レバレッジ非同期/のawait:
apiAsyncTestButton.Click += async (sender, e) =>
{
progressBar1.Visibility = ViewStates.Visible;
string response = Core.BLL.API.GetJsonTestAsync().Result;
progressBar1.Visibility = ViewStates.Invisible;
Toast.MakeText(this.ApplicationContext, "API response: " + response, ToastLength.Long)
.Show();
};
async/awaitを使用すると、明らかにコードがより簡潔になります。別のコールバックメソッドは必要ありません。しかし、私はこれらの2つのオプションがパフォーマンスの面でどのように積み重なっているのか疑問に思います。私はXamarinがC#をプラットフォーム固有のロジック(iOSとAndroid)に変換/変換することを前提としていますが、これは処理しやすく、パフォーマンスの影響はありますか?
'GetJsonTestAsync'に固執それはあなたが使用して、ライブラリ、および'非同期/ await'によって提供されます場合。 'GetJsonTest'への呼び出しをラップするために余分なスレッドを使用しないでください。このガイドラインは、Xamarin固有のものではありません。メモには、['Task.Run'](https://developer.xamarin.com/api/member/System.Threading.Tasks.Task.Run/p/System.Action/)APIがあります。低レベルのスレッドAPIを使用する必要があります。 – Noseratio