2016-11-03 5 views
2

次のコードでは、その非同期voidメソッドを呼び出しています。コード次すべての実行を完了するために非同期メソッドで待機する方法

public void LoadSystemDetails(int clientId) 
    { 
     DataSystem.Name = "Salesforce System"; 
     DataSystem.Description = ""; 
     GetAllFields(clientId); 
    } 

GetAllFields方法

public async void GetAllFields(int clientId) 
    { 
     this.DataSystem.SystemTables = new List<DataSystemTable>(); 


     using (var forceClient = await ConnectToSalesforceByOAuth(clientId)) 
     { 
       var SalesForceTable = new DataSystemTable 
      { 
       TableName = "Contact" 
      }; 
      DataSystem.SystemTables.Add(SalesForceTable); 

      var contact = forceClient.DescribeAsync<SalesforceObject>("Contact"); 
      var tableFields = new List<DataSystemField>(); 

      foreach (var con in contact.Result.Fields) 
      { 
       tableFields.Add(new DataSystemField 
       { 

        ColumnName = con.Name, 

       }); 
      } 

      SalesForceTable.EissSyncSystemFields = tableFields; 
     } 

あり、iは以下のようにcallbackScriptを呼び出します。

ここ
callbackScript.AppendLine(string.Format("var destinationSystem ={0};", JsonConvert.SerializeObject(this.DestinationSystem, Formatting.Indented))); 

DestinationSystemLoadSystemDetailsを呼んでいます。同様にDestinationSystem.LoadSystemDetails(clientId)

callbackScript実行時にはusing (var forceClient = await ConnectToSalesforceByOAuth(clientId))行が実行されます。 SystemTablesには値がありません。それはNameDescriptionを持っています。

ここで私はGetAllFieldsを完了するためにLoadSystemDetailsを待つ必要があります。

どうすればいいですか。私を助けてください。おかげさまで

答えて

7

あなたがGetAllFieldsを待つLoadSystemDetailsが必要な場合は、ここでは2つの問題があります。

  • あなたは
  • GetAllFieldsは火を意味し、忘れ非同期無効であり、同期コンテキストから非同期メソッドを呼び出しているが。それが終わるのを待つことは決してできません。

解決策: 結果または終了を待つ必要がある場合は、最初にasync voidを使用しないでください。 https://msdn.microsoft.com/en-us/magazine/jj991977.aspx

:非同期/のawaitの詳細については、この記事を見て、また、非同期メソッドに LoadSystemDetailsを変換した後(つまり、 Taskを返す必要があります)GetAllFieldsを待つ、または GetAllFields(clientId).Wait()

を使用するか、async Task代わり
セカンドを使用

0

@netchkinは既に言った:決してasync voidを使用しないでください。 async Taskを使用してください。あなたはTaskを返品する必要はありませんが、引き続き使用することができます。return;

関連する問題