Joins es una API de computación concurrente asincrónica ( Join-pattern ) de Microsoft Research para .NET Framework . Se basa en el cálculo de uniones y hace que las construcciones de concurrencia del lenguaje Cω estén disponibles como un ensamblado CLI que cualquier lenguaje compatible con CLI puede usar.
Las uniones se pueden utilizar para expresar concurrencia en una aplicación mediante el patrón de uniones, que se puede utilizar tanto para aplicaciones multiproceso como para aplicaciones distribuidas basadas en eventos. La API de uniones emula la expresión declarativa de patrones de sincronización con seguridad de tipos .
La biblioteca Joins emula métodos asincrónicos y sincrónicos. Un método asincrónico, en el lenguaje de Cω y Joins, es uno que no bloquea el método que lo llama ni devuelve ningún resultado, mientras que un método sincrónico bloquea el método que lo llama. En la API Joins, los métodos sincrónicos y asincrónicos se implementan como delegados genéricos . El uso de genéricos proporciona seguridad de tipos. Por ejemplo, se puede crear un conjunto de métodos sincrónicos y asincrónicos y usarlos para crear un objeto que implemente el patrón, como:
clase pública JoinDemo { pública de solo lectura Asíncrono.Canal < int > Cola ; pública de solo lectura Asíncrono.Canal < string > Enviar ; pública de solo lectura Síncrono < int > .Canal Recuperar ; privada Unirse joinPattern = Join.Create ( ) ; pública JoinDemo ( ) { joinPattern.Initialize ( out Cola ) ; joinPattern.Initialize ( out Enviar ) ; joinPattern.Initialize ( out Recuperar ) ; } }
Cuando se invocan métodos asincrónicos, los parámetros se colocan en un canal, que es una cola administrada por el entorno de ejecución de Joins. El método puede iniciar opcionalmente un nuevo subproceso para procesar los parámetros en segundo plano y devolver los resultados. Cuando se invoca el método sincrónico correspondiente, se devuelve el parámetro para su posterior procesamiento. Si no hay ningún parámetro presente en la cola cuando se invoca el método sincrónico, el llamador se detiene. El entorno de ejecución de Joins programa qué parámetro se devuelve en función de si está listo o no.
El patrón de sincronización de los métodos se define mediante patrones de unión , que describen lo que sucede cuando se invoca un conjunto de canales. Por ejemplo, lo que sucede cuando se invocan Send y Retrieve juntos puede ser diferente de lo que sucede cuando se invoca Send y Queue .
public void SetPatterns ( ) { join.When ( Enviar ).Y ( Recuperar ) .Hacer ( s = > s ); join.When ( Cola ) .Y ( Recuperar ) .Hacer ( n = > n.ToString ( ) ) ; join.When ( Enviar ) .Y ( Cola ) .Y ( Recuperar ) .Hacer ( s = > { Enviar ( s ) ; return Recuperar (); } ) ; }