和弦C#方法用&符分隔?

时间:2013-07-09 20:22:34

标签: c# polyphonic-c#

我正在阅读this introduction to Polyphonic C#,第一页包含此示例:

  

示例:简单缓冲区

     

这是Polyphonic C#类最简单有趣的例子:

public class Buffer {
    public String get() & public async put(String s) {
        return s;    
    } 
}

我根本没有得到它 方法&get()之间的put()表示什么?

2 个答案:

答案 0 :(得分:6)

这不合法C#。这是和弦C#。那是research project from Microsoft。遗憾的是它没有精确定义 1 ,但关键在于:

  

然而,在Polyphonic C#中,主体可能与一组(同步和/或异步)方法相关联。我们将这样的定义称为和弦,并且特定方法可能出现在几个和弦的标题中。和弦的主体只能在调用其标题中的所有方法后才能执行。

所以&将这些方法“绑定”到一个和弦中,直到调用和弦中的所有方法时才会调用它。

在同一article中稍微进一步:

  

这两种方法在单个和弦的标题中出现(用和号分隔),其主体由return语句组成。   现在假设bBuffer的实例,生产者和消费者线程希望通过b进行通信。生产者调用put(),因为该方法是异步的,所以不会阻塞。消费者调用get(),因为该方法是同步的,所以会阻塞,直到或者除非匹配调用put()。 b收到put()get()后,正在运行,put()的参数将作为调用{{}的结果返回1}}。get()的多次调用可能会在收到get()以重新唤醒其中一个之前处于待处理状态,并且可能会在其参数被消耗之前对put()进行多次调用随后的put() s。

1 :但是,这就是前沿的本质。我明白了。

答案 1 :(得分:1)

它只是指定构成和弦的多个方法的语法。在调用标头中的所有方法之前,主体不会执行。