2017-01-24 73 views
-3

我正在嘗試編寫一個可以返回值的C#異步函數。來自異步函數的C#返回值

功能代碼:

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這樣:

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

但從來沒有得到它的工作。有人有一個想法,我怎麼能夠從這個異步函數返回一個值?

希望得到任何幫助。的getTwitterFollowerCountTask<int>

+1

'但沒有得到它的工作'錯誤是什麼?沒有理由爲什麼這隻會快速瀏覽不起作用。 – jdmdevdotnet

+2

'async'函數通常應該返回'任務',而不是'T';請參閱[MSDN](https://msdn.microsoft.com/en-us/library/mt674882.aspx)文檔。 –

+0

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

回答

2

更改返回類型。閱讀更多MSDN https://msdn.microsoft.com/en-us/library/mt674882.aspx

+2

它會工作。即使你返回一個int,因爲該函數被標記爲async,它需要返回一個最終返回int的任務。試試吧,你可能會感到驚喜。 – MikeS

+0

@Hogan請參閱我所指的MSDN頁面 - 有一個示例完全返回'Task '。 –

0

正如其他人所指出的,

Task<int> 

是正確的返回類型。

而且,永遠不會有,如果你能避免它,因爲它是不可能等待返回void的方法的「異步無效」的方法。你應該這樣做的唯一情況是使用事件處理程序。否則,總是返回'任務'。

+0

的確如此。有關參考:https://msdn.microsoft.com/en-us/magazine/jj991977.aspx – MaLiN2223