在回调中使用匿名方法时,状态参数是否有用

本文关键字:状态 参数 有用 是否 方法 回调 | 更新日期: 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);
}

因为:

  • 它更短
  • 它省去了一个铸件
  • 无需声明局部变量

尽管它有效,但我想知道第二种方法可能涉及哪些风险。

这被认为是安全的吗?结果参数是否会因后续调用而"损坏"?

在回调中使用匿名方法时,状态参数是否有用

这被认为是安全的吗?

是的。因为

结果参数是否会被后续调用以某种方式"损坏"?

没有。resultsSetResults()方法的本地,因此尽管它正在被捕获,但它不能在其他地方被重用/截获。所有可以访问它的代码都可以在这里看到。

说了这么多,我不认为它比第一个版本有多大的改进。