Что такое Task · C# Backend — JobPilot

Что такое Task

C# Backend · 33%
Вопрос 3372 / #
Пример ответа

Коротко: Task в C# — это тип, представляющий асинхронную операцию, которая может выполняться параллельно, не блокируя основной поток. В моём опыте я использовал Task для обработки запросов в веб-приложениях, например, при работе с API или базами данных, чтобы повысить производительность и отзывчивость.

Ключевые идеи:
  • Task инкапсулирует состояние асинхронной операции, позволяя отслеживать её завершение, отмену или исключения.
  • Он поддерживает await для неблокирующего ожидания, что упрощает написание асинхронного кода без колбэков.
  • Task можно комбинировать через методы, такие как WhenAll или WhenAny, для параллельного выполнения нескольких операций.
Пример: Например, при загрузке данных из базы в веб-приложении я создаю Task<Data>, который выполняется асинхронно, пока основной поток обрабатывает другие запросы, используя await для получения результата без блокировки.
Пример асинхронного метода, возвращающего Task для загрузки пользователя из базы данных
csharp
using System;
using System.Threading.Tasks;
using Microsoft.EntityFrameworkCore;

public class UserService
{
    private readonly ApplicationDbContext _context;

    public UserService(ApplicationDbContext context)
    {
        _context = context;
    }

    public async Task<User> GetUserByIdAsync(int userId)
    {
        // Асинхронно загружаем пользователя, не блокируя поток
        var user = await _context.Users
            .FirstOrDefaultAsync(u => u.Id == userId);

        if (user == null)
        {
            throw new KeyNotFoundException("User not found");
        }

        return user;
    }
}

// Использование в контроллере
public async Task<IActionResult> GetUser(int id)
{
    try
    {
        var user = await _userService.GetUserByIdAsync(id);
        return Ok(user);
    }
    catch (KeyNotFoundException ex)
    {
        return NotFound(ex.Message);
    }
}
Вопросы для интервьюера:
  • Чем Task отличается от Thread в C#?Task — это абстракция над асинхронной операцией, которая может использовать пул потоков, в то время как Thread представляет отдельный поток ОС; Task более эффективен для I/O-операций и упрощает управление.
  • Как вы обрабатываете исключения в Task?Я использую try-catch с await для перехвата исключений в асинхронных методах или проверяю свойство Exception в Task, если работаю без await, чтобы избежать необработанных исключений.
Практический совет (на неделю):
  1. Используйте async/await для всех I/O-операций в бэкенде, чтобы избежать блокировки потоков и улучшить масштабируемость.
  2. При работе с несколькими Task применяйте Task.WhenAll для параллельного выполнения, но следите за ограничениями ресурсов, такими как подключения к базе данных.
C# Backend
Общий
33%
Навигация
Что такое полиморфизм в ООП
Следующий: Какие знаешь типы данных
Предыдущий: Что такое полиморфизм в ООП

Мы используем cookie для улучшения сайта. Продолжая пользоваться сайтом, вы соглашаетесь с политикой cookie и политикой конфиденциальности.