Мне интересно о поведении async/await
в отношении сбора мусора локальных переменных. В следующем примере я выделил значительную часть памяти и зашел в значительную задержку. Как видно из кода, Buffer
не используется после await
. Будет ли сбор мусора собранным во время ожидания или память будет занята в течение всей функции?
/// <summary>
/// How does async/await behave in relation to managed memory?
/// </summary>
public async Task<bool> AllocateMemoryAndWaitForAWhile() {
// Allocate a sizable amount of memory.
var Buffer = new byte[32 * 1024 * 1024];
// Show the length of the buffer (to avoid optimization removal).
System.Console.WriteLine(Buffer.Length);
// Await one minute for no apparent reason.
await Task.Delay(60000);
// Did 'Buffer' get freed by the garabage collector while waiting?
return true;
}