我正在阅读this introduction to Polyphonic C#,第一页包含此示例:
示例:简单缓冲区
这是Polyphonic C#类最简单有趣的例子:
public class Buffer { public String get() & public async put(String s) { return s; } }
我根本没有得到它
方法&
和get()
之间的put()
表示什么?
答案 0 :(得分:6)
这不合法C#。这是和弦C#。那是research project from Microsoft。遗憾的是它没有精确定义 1 ,但关键在于:
然而,在Polyphonic C#中,主体可能与一组(同步和/或异步)方法相关联。我们将这样的定义称为和弦,并且特定方法可能出现在几个和弦的标题中。和弦的主体只能在调用其标题中的所有方法后才能执行。
所以&
将这些方法“绑定”到一个和弦中,直到调用和弦中的所有方法时才会调用它。
在同一article中稍微进一步:
这两种方法在单个和弦的标题中出现(用和号分隔),其主体由return语句组成。 现在假设
b
是Buffer
的实例,生产者和消费者线程希望通过b
进行通信。生产者调用put()
,因为该方法是异步的,所以不会阻塞。消费者调用get()
,因为该方法是同步的,所以会阻塞,直到或者除非匹配调用put()。b
收到put()
和get()
后,正在运行,put()
的参数将作为调用{{}的结果返回1}}。对get()
的多次调用可能会在收到get()
以重新唤醒其中一个之前处于待处理状态,并且可能会在其参数被消耗之前对put()
进行多次调用随后的put()
s。
1 :但是,这就是前沿的本质。我明白了。
答案 1 :(得分:1)
它只是指定构成和弦的多个方法的语法。在调用标头中的所有方法之前,主体不会执行。