Xamarinの水域をテストしていて、必要なAndroidプロジェクトをそれに変換しようとしています。私はFacebookを使用して非常に基本的なログインをしています。私のコードは次のようになります:
public class MainActivity : Activity, IFacebookCallback
{
private LoginButton loginButton;
ICallbackManager callbackManager;
protected override void OnCreate(Bundle savedInstanceState)
{
base.OnCreate(savedInstanceState);
SetContentView(Resource.Layout.Main);
loginButton = FindViewById<LoginButton>(Resource.Id.login_button);
loginButton.SetReadPermissions(new List<string>() {"email"});
this.callbackManager = CallbackManagerFactory.Create();
loginButton.RegisterCallback(callbackManager, this);
}
public async void OnSuccess(Java.Lang.Object result)
{
var loginResult = result as LoginResult;
var accesstoken = loginResult.AccessToken;
var client = new FacebookApiClient();
var textview = FindViewById<TextView>(Resource.Id.emailDisplay);
try
{
var fbResponse = await GetFaceBookResponse(accesstoken);
textview.Text = fbResponse.Email;
}
catch(System.Exception ex)
{
var myException = ex;
}
}
private async Task<FacebookResponse> GetFaceBookResponse(AccessToken accessToken)
{
var client = new FacebookApiClient();
var response = await client.GetEmail(accessToken);
return response;
}
}
そのため、IFacebookCallbackにOnSuccessメソッドを実装しています。これにはvoidメソッドが必要です。これがこれを行う唯一の方法であるように思われます。これは私には問題ないようで、正常に機能しているようにも見えます。ただし、特別な状況(イベントハンドラー)を除いて、voidの戻り値の型でasyncを使用することはできません。ここを再確認して、問題が発生しないことを確認しますか?
また、これを行うためのより良い方法がある場合、それは何ですか?グーグルをしているときに、Task.Runを使用する方法を見つけました。
var cts = new CancellationTokenSource();
var ct = cts.Token;
try
{
var fbResponse = await Task.Run(async () =>
{
var response = await client.GetEmail(accesstoken);
return response;
}, ct);
textview.Text = fbResponse.Email;
}
しかし、なぜそれが私がしていることよりも優れているのか、それとも実際に何か違うのかはよくわかりません。
そのため、IFacebookCallbackにOnSuccessメソッドを実装しています。これにはvoidメソッドが必要です。これがこれを行う唯一の方法であるように思われます。これは私には問題ないようで、正常に機能しているようにも見えます。ただし、特別な状況(イベントハンドラー)を除いて、voidの戻り値の型でasyncを使用することはできません。ここを再確認して、問題が発生しないことを確認しますか?
それはまさにあなたがそれを使用しているものなので、それは問題ありません。自分のコードのどこかでそのメソッドを待とうとしない限り(非同期voidメソッドは待てないので、それがノーノーである理由です)、あなたは問題ありません。
マイクロソフト社のサンプルのうちの1つは、また、単純な非同期実装を含むIFacebookCallback.OnSuccess()
、ここに。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加