Joins es una API de computación concurrente asincrónica ( patrón de combinación ) de Microsoft Research para .NET Framework . Se basa en el cálculo de combinaciones y hace que las construcciones de simultaneidad del lenguaje Cω estén disponibles como un ensamblado CLI que cualquier lenguaje compatible con CLI puede usar.
Descripción general
Las uniones se pueden utilizar para expresar simultaneidad en una aplicación utilizando el patrón de uniones, utilizable tanto para aplicaciones de subprocesos múltiples como para aplicaciones distribuidas basadas en eventos . La API Joins emula la expresión declarativa segura de tipos de patrones de sincronización.
La biblioteca Joins emula métodos asíncronos y síncronos. Un método asincrónico, en lenguaje Cω y Joins, es uno que no bloquea el método de la persona que llama, ni devuelve ningún resultado, mientras que un método sincrónico bloquea el método de la persona que llama. En la API de Joins, los métodos sincrónicos y asincrónicos se implementan como delegados genéricos . El uso de genéricos proporciona seguridad de tipo. 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úblico solo lectura Asíncrono . Cola de canal < int > ; public readonly Asynchronous . Canal < cadena > Enviar ; public readonly Synchronous < int >. Recuperación de canal ; private Join joinPattern = Unirse . Crear (); public JoinDemo () { joinPattern . Inicializar ( cola de salida ); joinPattern . Inicializar ( envío de salida ); joinPattern . Inicializar ( fuera de Recuperar ); } }
Cuando se llaman métodos asincrónicos, los parámetros se colocan en un canal, que es una cola administrada por el tiempo de ejecución de Joins. Opcionalmente, el método puede iniciar un nuevo hilo para procesar los parámetros en segundo plano y devolver los resultados. Cuando se llama al método síncrono correspondiente, el parámetro se devuelve para su procesamiento posterior. Si no hay ningún parámetro presente en la cola cuando se llama al método síncrono, la persona que llama se detiene. El tiempo de ejecución de Joins programa qué parámetro se devuelve en función de si está listo.
El patrón de sincronización de los métodos se define mediante patrones de combinación , que describen lo que sucede cuando se invoca un conjunto de canales. Por ejemplo, lo que sucede cuando Enviar y Recuperar se llaman juntos puede ser diferente de Enviar y Cola .
public void SetPatterns () { unirse . Cuando ( Enviar ). Y ( recuperar ). Hacer ( s => s ); unirse . Cuando ( Cola ). Y ( recuperar ). Hacer ( n => n . ToString ()); unirse . Cuando ( Enviar ). Y ( Cola ). Y ( recuperar ). Hacer ( s => { Enviar ( s ); devolver Recuperar (); }); }