c# -如何在一个方法中运行多个await

本文关键字:方法 一个 运行 await | 更新日期: 2023-09-27 18:01:37

我不知道如何在单个方法中运行多个await方法。例如,我的代码如下:

      public static async Task<bool> Authenticate()
    {
        bool authen = false;
        string message = String.Empty;
        try
        {
            session = await FacebookSessionClient.LoginAsync("user_about_me,read_stream");
            fbAccessToken = session.AccessToken;
            fbFacbookID = session.FacebookId;
            await saveProfile(fbFacebookID); //error here,my app is closed at here
            authen = true;
        }
        catch (InvalidOperationException e)
        {
            authen = false;
        }
        return authen;
    }

还有save profile

方法
  public async static void saveProfile(string fbFacbookID)
    {
        string response = string.Empty;
        if (!string.IsNullOrEmpty(fbFacbookID))
        {
            response=await StaticClass.getJsonStream(string.Format("http://graph.facebook.com/{0}", fbFacbookID));
            JObject _object = JObject.Parse(response);
            SaveValueSetting("usernameFB",(string)_object["username"]);
        }
        else
        {
            return;
        }
    }

但是我不能运行method ?那么我该如何解决这个问题呢?

c# -如何在一个方法中运行多个await

可以使用下面提到的代码。

 private void Button_Click_1(object sender, RoutedEventArgs e)
    {
        MyMethod();
        MyMethod1();
    }
    public async Task MyMethod()
    {
        Task<int> longRunningTask = LongRunningOperation();
        //indeed you can do independent to the int result work here 
        //and now we call await on the task 
        int result = await longRunningTask;
        //use the result 
        MessageBox.Show(result.ToString());
    }
    public async Task MyMethod1()
    {
        Task<int> longRunningTask = SecondMethod();
        //indeed you can do independent to the int result work here 
        //and now we call await on the task 
        int result = await longRunningTask;
        //use the result 
        MessageBox.Show(result.ToString());
    }
    public async Task<int> LongRunningOperation() // assume we return an int from this long running operation 
    {
        await Task.Delay(5000); //5 seconds delay
        return 1;
    }
    public async Task<int> SecondMethod()
    {
        await Task.Delay(2000);
        return 1;
    }