Несколько методов в нашей кодовой базе используют «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);
}