2017-05-24 50 views
2

我有一些異步方法的問題。異步方法調用異步方法並等待另一種方法(http客戶端)

public async void MakePost() 
    { 
     var cookieArray = GetCookies().Result; 
     (...) 
    } 
async public Task<string[]> GetCookies() 
    { 
     (...) 
     var response = await httpClient.SendAsync(request); 
     string cookieTempSession = response.Headers.ToString(); 
     (...) 
     return cookieArray; 
    } 

沒有var response = await httpClient.SendAsync(request);發生後,我把斷點下一行string cookieTempSession = response.Headers.ToString();但它從來沒有達到它。我試圖「嘗試趕上」,但也沒有發生。當我將這兩種方法合併爲一種時,它可以很好地工作,但它並不那麼漂亮。我只是想知道那裏發生了什麼。

+0

只要調試異步方法帶有斷點,它有點不可預知,所以我不會依賴你在調試器中觀察到的。 – dasblinkenlight

回答

1

由於第一種方法是async,你應該使用await而不是Result

var cookieArray = await GetCookies(); 

如果你不是編程前端,加上ConfigureAwait(false)why?)的號召,像這樣:

var cookieArray = await GetCookies().ConfigureAwait(false); 
... 
var response = await httpClient.SendAsync(request).ConfigureAwait(false); 
+0

謝謝。有效。現在我將嘗試找出原因。祝你今天愉快! :) – OskarS

+1

@OskarS不客氣! [這是關於以前可能發生的事情的提示](https://stackoverflow.com/q/23371505/335858)。 – dasblinkenlight

+1

@OskarS:關鍵準則爲[不上異步代碼塊(http://blog.stephencleary.com/2012/07/dont-block-on-async-code.html)。 –