在回调中使用匿名方法时,状态参数是否有用
本文关键字:状态 参数 有用 是否 方法 回调 | 更新日期: 2023-09-27 18:26:48
我正在使用带有SynchronizationContext
对象的回调来从WCF服务更新客户端UI。
我使用的代码模式如下:
public void SetResults(string callId, IEnumerable<Result> results)
{
uiSyncContext.Post(new SendOrPostCallback(state => {
var r = (IEnumerable<Result>)state;
chart1.Series[callId].Points.DataBindXY(r.Select...
}, results);
}
Post
方法接受一个委托和一个状态对象。没有其他签名。
因为我使用的是匿名方法,所以我倾向于写:
public void SetResults(string callId, IEnumerable<Result> results)
{
uiSyncContext.Post(new SendOrPostCallback(state => {
chart1.Series[callId].Points.DataBindXY(results.Select...
}, null);
}
因为:
- 它更短
- 它省去了一个铸件
- 无需声明局部变量
尽管它有效,但我想知道第二种方法可能涉及哪些风险。
这被认为是安全的吗?结果参数是否会因后续调用而"损坏"?
这被认为是安全的吗?
是的。因为
结果参数是否会被后续调用以某种方式"损坏"?
没有。results
是SetResults()
方法的本地,因此尽管它正在被捕获,但它不能在其他地方被重用/截获。所有可以访问它的代码都可以在这里看到。
说了这么多,我不认为它比第一个版本有多大的改进。