Я просто столкнулся с странным поведением с использованием методов async в структурах. Может кто-нибудь объяснить, почему это происходит и что самое главное, если есть обходной путь? Вот простая тестовая структура только для демонстрации проблемы
public struct Structure
{
private int _Value;
public Structure(int iValue)
{
_Value = iValue;
}
public void Change(int iValue)
{
_Value = iValue;
}
public async Task ChangeAsync(int iValue)
{
await Task.Delay(1);
_Value = iValue;
}
}
Теперь позвольте использовать структуру и выполните следующие вызовы
var sInstance = new Structure(25);
sInstance.Change(35);
await sInstance.ChangeAsync(45);
Первая строка создает структуру, а значение sInstance._Value
равно 25
. Вторая строка обновляет значение sInstance._Value
и становится 35
. Теперь третья строка ничего не делает, но я ожидаю, что она обновит значение sInstance._Value
до 45
, однако sInstance._Value
останется 35
. Зачем? Есть ли способ написать метод async для структуры и изменить значение поля структуры?