所以这不起作用:
public int BufferedCount => { lock (buffer) { return buffer.Count; } }
第一个{
是意外的。但是我不知道为什么。
这也不起作用:
public int BufferedCount => lock (buffer) { return buffer.Count; }
buffer
是一个私有列表,必须加以保护,以防止来自多个线程的并行请求。该属性应提供该列表的当前计数。
我认为我最近在某个地方看到了带有lock
语句的表达式密集型属性,但是我不知道它的外观如何。
答案 0 :(得分:6)
lock
语句是语句,而不是表达式,因此它不能是表达式主体成员的表达式。您需要使用传统的方法主体语法,使主体成为lock
语句。
在表达式表达式强壮的成员中使用lock
语句的唯一方法是使用某种形式的表达式来组成其他语句,这将是非常hacky的方式,比不使用表达式表达式强壮的语法要有更多的工作。您必须要做一些事情,例如定义一个lambda并立即执行它,这要比编写传统的方法主体涉及更多样板代码。