Здравствуйте, vaa, Вы писали:
vaa>Или могут? Или нельзя, но иногда можно?
Кстати
А так
public Task<int> AsyncProp
{
get { return Task<int>.Run(async () => await Task.FromResult(1)); }
}
Здравствуйте, Serginio1, Вы писали:
S>Здравствуйте, vaa, Вы писали:
vaa>>Или могут? Или нельзя, но иногда можно?
S>Кстати
S>А так
S>S> public Task<int> AsyncProp
S> {
S> get { return Task<int>.Run(async () => await Task.FromResult(1)); }
S> }
S>
а как вернуть управление из асинка в сеттер? эвэйт запрещен. остается только wait но он вроде блокировать поток.
Здравствуйте, vaa, Вы писали:
vaa>>>Или могут? Или нельзя, но иногда можно?
S>>Кстати
S>>А так
S>>S>> public Task<int> AsyncProp
S>> {
S>> get { return Task<int>.Run(async () => await Task.FromResult(1)); }
S>> }
S>>
vaa>а как вернуть управление из асинка в сеттер? эвэйт запрещен. остается только wait но он вроде блокировать поток.
Поему запрещен?
Как обычно. Возвращается Task
То есть
var result= await AsyncProp;
Здравствуйте, Serginio1, Вы писали:
vaa>>а как вернуть управление из асинка в сеттер? эвэйт запрещен. остается только wait но он вроде блокировать поток.
S>Поему запрещен?
я говорю об асинхронном вызове внутри сеттера
public class Date
{
private int _month = 7; // Backing store
public int Month
{
get => _month;
set
{
_month = value;
await DoSomething();
}
}
}
Если мы не ожидаем завершения вызова DoSomething, состояние программы становится неопределенным. Лезут баги.
Здравствуйте, vaa, Вы писали:
vaa>Здравствуйте, Serginio1, Вы писали:
vaa>>>а как вернуть управление из асинка в сеттер? эвэйт запрещен. остается только wait но он вроде блокировать поток.
S>>Поему запрещен?
vaa>я говорю об асинхронном вызове внутри сеттера
vaa>vaa>public class Date
vaa>{
vaa> private int _month = 7; // Backing store
vaa> public int Month
vaa> {
vaa> get => _month;
vaa> set
vaa> {
vaa> _month = value;
vaa> await DoSomething();
vaa> }
vaa> }
vaa>}
vaa>
vaa>Если мы не ожидаем завершения вызова DoSomething, состояние программы становится неопределенным. Лезут баги.
Ну вопервых не int, а Task<int>
во вторых мы прячем await в
Task<int>.Run(async () => await Task.FromResult(1))
public Task<int> AsyncProp
{
get { return Task<int>.Run(async () => await Task.FromResult(1)); }
}
В твоем случае прекрасно работает и без async
public class Date
{
private int _month = 7; // Backing store
public Task<int> Month
{
get => Task.FromResult(_month);
set
{
Task.Run(async () =>
{
_month = await value;
await DoSomething();
});
}
}
}
Другой вопрос, как ты дождешься выполнения Setterа? Ведь сеттер ничего не возвращает
Проще использовать асинхронный метод.
Или добавить Task свойству которому и присваивать
Task asynckprop
public static Task AsyncProp
{
get =>asynckprop;
}
set
{
asynckprop=Task.Run(async () =>
{
_month = await value;
await DoSomething();
});
}
И вызов
date.Month=Task.FromResult(_month);
await date.AsyncProp;
Либо делать еще один тип свойства для задач. Только никому это особо то и не нужно.
Проще использовать асинхронные методы