Обработка исключений корутины: методы и примеры кода на разных языках программирования

При работе с сопрограммами во время их выполнения могут возникать исключения. Обработка исключений сопрограмм имеет решающее значение для правильного управления ошибками и потока управления. Вот несколько методов обработки исключений сопрограмм на разных языках программирования:

  1. Python (с использованием asyncio):

    import asyncio
    async def my_coroutine():
    raise ValueError("Something went wrong!")
    async def main():
    try:
        await my_coroutine()
    except ValueError as e:
        print(f"Caught exception: {str(e)}")
    asyncio.run(main())
  2. JavaScript (с использованием async/await):

    async function myCoroutine() {
    throw new Error("Something went wrong!");
    }
    async function main() {
    try {
    await myCoroutine();
    } catch (error) {
    console.log(`Caught exception: ${error.message}`);
    }
    }
    main();
  3. Java (с использованием CompletableFuture):

    import java.util.concurrent.CompletableFuture;
    public class CoroutineExample {
    public static CompletableFuture<Void> myCoroutine() {
        CompletableFuture<Void> future = new CompletableFuture<>();
        future.completeExceptionally(new RuntimeException("Something went wrong!"));
        return future;
    }
    
    public static void main(String[] args) {
        myCoroutine()
            .exceptionally(ex -> {
                System.out.println("Caught exception: " + ex.getMessage());
                return null;
            });
    }
    }
  4. C# (с использованием async/await):

    using System;
    using System.Threading.Tasks;
    public class CoroutineExample
    {
    public static async Task MyCoroutine()
    {
        throw new Exception("Something went wrong!");
    }
    public static async Task Main()
    {
        try
        {
            await MyCoroutine();
        }
        catch (Exception ex)
        {
            Console.WriteLine($"Caught exception: {ex.Message}");
        }
    }
    }