これはasyncvoidの正しい使用法ですか?Xamarin

ygetarts

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;
        }

しかし、なぜそれが私がしていることよりも優れているのか、それとも実際に何か違うのかはよくわかりません。

BoltClock

そのため、IFacebookCallbackにOnSuccessメソッドを実装しています。これにはvoidメソッドが必要です。これがこれを行う唯一の方法であるように思われます。これは私には問題ないようで、正常に機能しているようにも見えます。ただし、特別な状況(イベントハンドラー)を除いて、voidの戻り値の型でasyncを使用することはできません。ここを再確認して、問題が発生しないことを確認しますか?

それはまさにあなたがそれを使用しているものなので、それは問題ありません。自分のコードのどこかでそのメソッドを待とうとしない限り(非同期voidメソッドは待てないので、それがノーノーである理由です)、あなたは問題ありません。

マイクロソフト社のサンプルのうちの1つは、また、単純な非同期実装を含むIFacebookCallback.OnSuccess()ここに

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

これはdisplay:flexの正しい使用法ですか?

分類Dev

これは指令の正しい使用法ですか?

分類Dev

これはv-on:changeの正しい使用法ですか?

分類Dev

これはflattenの正しい使用法ですか?

分類Dev

これはMoqの正しい使用法ですか?

分類Dev

これはTransactionSopeの正しい使用法ですか?

分類Dev

これはAngularでのdocheckの正しい使用法ですか?

分類Dev

これはCでの「restrict」の正しい使用法ですか?

分類Dev

これは、@ OneToOne関係での「mappedBy」の正しい使用法ですか?

分類Dev

async and promise-これは正しい使用法ですか?

分類Dev

Keras fit_generator()、これは正しい使用法ですか?

分類Dev

これはMooseX :: Getoptの正しい(意図された)使用法ですか?

分類Dev

このawait / asyncの使用法は正しいですか?

分類Dev

これはトランジェントの正しい使用法ですか?

分類Dev

これは右辺値参照の正しい使用法ですか?

分類Dev

これは式ツリーの正しい使用法でしょうか?

分類Dev

jQuery:この状況での.on()の正しい使用法は何ですか?

分類Dev

C ++で自動削除が予想される場合、これは静的の正しい使用法ですか?

分類Dev

これは dtos でのビルダー パターンの正しい使用法ですか?

分類Dev

これはJSON-LDインデックスマップの正しい使用法ですか?

分類Dev

これはJSON-LDインデックスマップの正しい使用法ですか?

分類Dev

Python /スレッド/バリア:これはバリアの正しい使用法ですか?

分類Dev

@NonNullと@Nullableの正しい使用法は何ですか?

分類Dev

PyArray_SIZEの正しい使用法は何ですか?

分類Dev

FrameTimingとFrameTimingManagerの正しい使用法は何ですか

分類Dev

const修飾子の正しい使用法は何ですか?

分類Dev

この状況でのAVG()関数の正しい使用法は何ですか?

分類Dev

SQL Serverトリガー-これは可能であり、正しい使用法ですか

分類Dev

MySQLの「USING」句のこの使用法が正しくないのはなぜですか?

Related 関連記事

  1. 1

    これはdisplay:flexの正しい使用法ですか?

  2. 2

    これは指令の正しい使用法ですか?

  3. 3

    これはv-on:changeの正しい使用法ですか?

  4. 4

    これはflattenの正しい使用法ですか?

  5. 5

    これはMoqの正しい使用法ですか?

  6. 6

    これはTransactionSopeの正しい使用法ですか?

  7. 7

    これはAngularでのdocheckの正しい使用法ですか?

  8. 8

    これはCでの「restrict」の正しい使用法ですか?

  9. 9

    これは、@ OneToOne関係での「mappedBy」の正しい使用法ですか?

  10. 10

    async and promise-これは正しい使用法ですか?

  11. 11

    Keras fit_generator()、これは正しい使用法ですか?

  12. 12

    これはMooseX :: Getoptの正しい(意図された)使用法ですか?

  13. 13

    このawait / asyncの使用法は正しいですか?

  14. 14

    これはトランジェントの正しい使用法ですか?

  15. 15

    これは右辺値参照の正しい使用法ですか?

  16. 16

    これは式ツリーの正しい使用法でしょうか?

  17. 17

    jQuery:この状況での.on()の正しい使用法は何ですか?

  18. 18

    C ++で自動削除が予想される場合、これは静的の正しい使用法ですか?

  19. 19

    これは dtos でのビルダー パターンの正しい使用法ですか?

  20. 20

    これはJSON-LDインデックスマップの正しい使用法ですか?

  21. 21

    これはJSON-LDインデックスマップの正しい使用法ですか?

  22. 22

    Python /スレッド/バリア:これはバリアの正しい使用法ですか?

  23. 23

    @NonNullと@Nullableの正しい使用法は何ですか?

  24. 24

    PyArray_SIZEの正しい使用法は何ですか?

  25. 25

    FrameTimingとFrameTimingManagerの正しい使用法は何ですか

  26. 26

    const修飾子の正しい使用法は何ですか?

  27. 27

    この状況でのAVG()関数の正しい使用法は何ですか?

  28. 28

    SQL Serverトリガー-これは可能であり、正しい使用法ですか

  29. 29

    MySQLの「USING」句のこの使用法が正しくないのはなぜですか?

ホットタグ

アーカイブ