2017-05-24 42 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)。 –