我们代码库中的几种方法使用了'MaybeObject',当结果可能已知或依赖于尚未执行的外部webservice调用时,可以将其传递给函数。例如,下面的属性可以具有已知的指定值,或者如果在异步调用完成后调用且未指定,则返回异步调用的结果。
private string _internalString;
public string stringProp
{
get
{
if (!string.IsNullOrEmpty(_internalString))
return _internalString;
return resultOfAsyncCallFromSomewhereElse;
}
set { _internalString = value; }
}
显然,在异步调用完成之前尝试引用该属性将导致空引用异常,因此我们还需要一个标志来检查该值是否可用。
问题是,在下面的代码中,lambda表达式的创建会尝试并评估stringProp
(可能尚未填充),还是评估将被推迟,直到调用生成的Action(这将在检查异步操作完成后进行)?
public Action ExampleMethod(MaybeObject maybe)
{
return () => doSomethingWithString(maybe.stringProp);
}