2016-04-20 2 views
-2

Существует ли какой-либо компилятор или среда выполнения, которая выполняет или планирует поддерживать неявное асинхронное программирование.Есть ли язык, компилятор или среда выполнения, которая поддерживает неявное асинхронное программирование

Например

public List<Product> findProductByIdWithSOsAndPOs(int id){ 

    //The next 3 tasks can be done in asynchronously 

    //task 1.a may take a while 
    Product product = productRepo.findById(id); 

    //task 1.b may take a while 
    List<SalesOrder> salesOrders = salesOrderRepository.findAllByProductId(id); 

    //task 1.c may take a while 
    List<PurchaseOrder> purchaseOrders = purchaseOrderRepository.findAllByProductId(id); 

    //the runtime is smart enough to know that this task depends 
    //on the previous 3 (1.a, 1.b and 1.c) and won't perform this 
    //until they are complete without any special syntax (await, 
    //wrapping in future.map, callbacks, etc.) 
    //task 2 
    Product productWithSOsAndPOs = new Product(product.id, product.name, salesOrders, purchaseOrders); 

    //the runtime is also smart enough until all the tasks are complete 
    //task 3 
    return productWithSOsAndPOs; 
} 
+1

Непонятно, что именно вы просите, пожалуйста, объясните своими словами, что вы ищете. Вышеупомянутый C#, поэтому я предполагаю, что в Windows? CLR уже имеет несколько способов выполнения асинхронных задач и для параллельного программирования. –

+0

Это может быть C# или Java. Я старался быть как можно более общим, чтобы сделать его более понятным. Я не очень обеспокоен языком. Я спрашиваю, есть ли язык, который выполняет асинхронное программирование без какого-либо специального синтаксиса. Например, я верю в C#, что вы будете использовать async/await, но вместо этого среда выполнения может сказать, что вы пытаетесь запустить параллельно контексту. – decapo

+0

Есть несколько языков, которые имеют параллельное программирование в качестве концепции первого порядка. Все будет иметь «некоторый уровень» синтаксиса. – user2864740

ответ

1

В .NET библиотека Tasks.Parallel делает вещи довольно естественно. Всегда присутствует некоторый уровень синтаксиса, но это просто происходит с территорией. Параллельное программирование может быть сложным, и компилятор не всегда может точно сказать, что вы делаете, особенно если задействовано несколько потоков. Использование Entity Framework на вашем уровне данных может действительно упростить процесс, поскольку асинхронные вызовы создаются для вас.

+0

Спасибо. На самом деле это не то, о чем я прошу. Оглянувшись больше, я не думаю, что кто-то делает то, о чем я прошу, и я думаю, поэтому его трудно выразить. Код, который я написал выше, является допустимым кодом в контексте блокировки (т. Е. Он вернет результат, если все работает правильно). Однако в неблокирующей среде этот код не может вернуть результат. Вы должны добавить дополнительный код, например «ожидание», чтобы он работал надежно, но когда я прочитаю код, я могу понять, что нужно запускать и ждать результата. Я спрашиваю, поддерживает ли какой-либо язык/компилятор/время выполнения. – decapo

Смежные вопросы