Няколко метода в нашата кодова база използват „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);
}