+9 votos
180 visitas

É possível a utilização de thread em c# como ThreadPool para realizar processos paralelos em um BusinessComponent do BEF?

Gostaria de fazer a verificação de campos de varios eventos que será processado em uma rotina paralelamente, pois essa validação não irá afetar no restante do processamento da guia, e por ter uma quantidade grande de campos que serão validados e também são muitos eventos colocaria esse processamento em paralelo, para que seja executado de uma forma mais rápida:

Seria algo do tipo:

Criteria criterio = new Criteria("");
List<Eventos> listaEventos = Eventos.GetMany(criterio);

foreach (Eventos evento in listaEventos)
{
    ThreadPool.QueueUserWorkItem(delegate
    {
        if (evento.ExisteCampoInvalidosParaMonitoramento())
        {
            evento.Edit();
            // colocar algumas ocorrências
            evento.Save();
        }
    });
}

 

por (196 pontos)
editado por | 180 visitas
Podes escrever um pouco mais sobre a necessidade?
coloquei um exemplo mais ou menos do que eu queria..
O Exemplo acima não é possível, as linhas 10 e 12 vai ter problemas. Isto poderia ser alterado para uma lista que no final das threads pode ser salva corretamente.
Também é preciso garantir que o que está sendo chamado não irá fazer consulta a base de dados.
Mas é um recurso que se disponibilizado pela Tecnologia agregaria muito em nossas aplicações.
Concordo com o Maicon, desta forma limita muito o desenvolvimento em paralelo, já que não é possível realizar nenhuma consulta, salvar nem criar nada nesses processos.
Este item é cabível como um item no UserVoice, ou é algo que já foi analisado pela tecnologia?

2 Respostas

+5 votos
Melhor resposta
Desde que não façam acesso a dados, acredito que sim.

Se você tiver Get/Save/.. terá problema de conexão, pois a conexão com o banco de dados é única.
por (632 pontos)
selecionada por
Alterei a minha pergunta colocando mais ou menos um exemplo do que eu gostaria de fazer. Pela sua resposta eu não vou conseguir fazer isso então..
0 votos

O mecanismo de transações do BEF não está preparado para multithread e isto poderá ocasionar problemas no commit dos dados. Mesmo que você não utilize o TransactionContext explicitamente, o Save das entidades utiliza. Então o ideal é não salvar dados concorrentemente nas Threads.

Foi adicionado um item no UserVoice referente a multithread no BEF: http://bennertec.uservoice.com/forums/155712-geral/suggestions/6147293-bef-aprimorar-o-suporte-a-multithread

por (865 pontos)
editado por

Perguntas relacionadas

Melhores Aug 2025
    200 pontos
    Melhores 2025 Jul 28 - Aug 03
    1. Larson

      156 Pontos

    2. danilo.pereira

      96 Pontos

    3. danilo.pereira

      96 Pontos

    4. danilo.pereira

      96 Pontos

    5. luciano.fronza

      61 Pontos

    6. luciano.fronza

      61 Pontos

    7. luciano.fronza

      61 Pontos

    8. diuari.molinari

      52 Pontos

    9. diuari.molinari

      51 Pontos

    10. diuari.molinari

      51 Pontos

    517 perguntas
    566 respostas
    389 comentários
    704 usuários