2017-01-24 30 views
-3

値を返す可能性のあるC#非同期関数を記述しようとしています。async関数からの戻り値

現在の機能コード:

public async int getTwitterFollowerCount() 
{ 
    var twitterCtx = new TwitterContext(SharedState.Authorizer); 

    var followers = await (from follower in twitterCtx.Friendship where follower.Type == FriendshipType.FollowerIDs && follower.UserID == "15411837" select follower).SingleOrDefaultAsync(); 

    if (followers != null && followers.IDInfo != null && followers.IDInfo.IDs != null) 
    { 
     return followers.IDInfo.IDs.Count(); 
    } 
} 

しかし、決してそれが働いてしまった:

public async void getTwitterFollowerCount() 
{ 
    var twitterCtx = new TwitterContext(SharedState.Authorizer); 

    var followers = await (from follower in twitterCtx.Friendship where follower.Type == FriendshipType.FollowerIDs && follower.UserID == "15411837" select follower).SingleOrDefaultAsync(); 

    if (followers != null && followers.IDInfo != null && followers.IDInfo.IDs != null) 
    { 
     followers.IDInfo.IDs.Count(); 
    } 
} 

私はこれにsimilare何かをしようとしてきました。誰かがアイデアを持っていますか?この非同期関数からどのように値を返すことができるのでしょうか?

何か助けていただければ幸いです。

+1

「それでもエラーは出ませんでした」これがちょっとだけ見えない理由はありません。 – jdmdevdotnet

+2

'async'関数は通常、' T122ではなく 'タスク'を返します。 [MSDN](https://msdn.microsoft.com/en-us/library/mt674882.aspx)のドキュメントを参照してください。 –

+0

[how-to-ask](http://stackoverflow.com/help/how-to-ask) – swe

答えて

2

戻り値のタイプをからTask<int>に変更します。詳細はMSDN https://msdn.microsoft.com/en-us/library/mt674882.aspxをご覧ください。他の人が示されているよう

+2

それは動作します。関数が非同期としてマークされているためintを返す場合でも、最終的にintを返すタスクを返す必要があります。試してみてください。あなたはうれしく驚くかもしれません。 – MikeS

+0

@Hogan私が参照しているMSDNのページを参照してください。正確に 'Task 'を返す例があります。 –

0

Task<int> 

正しい戻り型です。

また、voidを返すメソッドを待つことができないため、回避することができない場合は、 'async void'メソッドを使用しないでください。これを行う必要がある唯一のケースは、イベントハンドラです。それ以外の場合は、常に「タスク」を返します。

+0

それは確かに本当です。参照先:https://msdn.microsoft.com/en-us/magazine/jj991977.aspx – MaLiN2223