Некоторые методы в нашей кодовой базе используют «MaybeObject», который может быть передан функциям, когда результат может быть известен, или может полагаться на внешний вызов веб-службы, который еще не был выполнен.Например, свойство ниже может иметь либо указанное известное значение, либо, если оно не указано и вызывается после завершения асинхронного вызова, оно вернет результат асинхронного вызова.
private string _internalString;
public string stringProp
{
get
{
if (!string.IsNullOrEmpty(_internalString))
return _internalString;
return resultOfAsyncCallFromSomewhereElse;
}
set { _internalString = value; }
}
Очевидно, что попытка сослаться на свойство до завершения асинхронного вызова вызовет исключение нулевой ссылки, поэтому у нас также есть флаг для проверки доступности значения.
Вопрос в том, что в приведенном ниже коде создание лямбда-выражения будет пытаться и оценить stringProp
(которое может еще не быть заполнено), или оценка будет отложена до тех пор, пока не будет вызвано результирующее действие (что приведет к быть после проверки завершения асинхронной операции)?
public Action ExampleMethod(MaybeObject maybe)
{
return () => doSomethingWithString(maybe.stringProp);
}