none
Como criar uma aplicação console multi-thread com concorrência e mantendo a integridade dos dados? RRS feed

  • Pergunta

  • Olá,

    Sou novo no mundo C# e estou procurando algum pattern para criar uma aplicação console que permita multi-threads acessarem um único repositório sem ter problemas de concorrência. Ex: Thread1 responsável por ler imóveis e atualizar estados. Thread2 responsável por ler mesmos imóveis e atualizar outras informações. No momento da leitura em ambos devem manter uma integridade dos dados.

    Muito obrigado pela atenção.

    sexta-feira, 13 de janeiro de 2017 12:54

Todas as Respostas

  • Olá opicarelli

    Você deve utilizar controle de concorrencia!

    SqlTransaction;
    
    //Pode utilizar também
    TransactionScope;

    Se ajudei Vote como Útil, se resolvi seu problema clique em Marcar como Resposta.


    Daniel Ribeiro Arrais
    Consultor Sênior
    Site: www.danielarrais.com.br
    Linkedin: http://www.linkedin.com/in/danielarrais
    E-mail: arraishapkido@gmail.com
    Skype: dani.arrais

    sexta-feira, 13 de janeiro de 2017 16:53
  • Que tipo de integridade você se refere? Pois na sua descrição a thread 1 atualiza uma informação diferente da thread 2.

    Qual relação de dependência entre estas informações?

    Alguma delas deve ocorrer primeiro?

    Estou fazendo todas estas perguntas pois talvez o melhor caso não seja nem a utilização de simples threads.


    If you found this post helpful, please "Vote as Helpful". If it actually answered your question, remember to "Mark as Answer".

    Se achou este post útil, por favor clique em "Votar como útil". Se por acaso respondeu sua dúvida, lembre de "Marcar como Resposta".

    sexta-feira, 13 de janeiro de 2017 17:46
  • Olá Daniel e Juliano,

    As threads apenas fazem a mesma leitura. Criei aqui uma aplicação console com um repositório de imóveis que tem relacionamento a uma cidade. E duas threads que injetam o repositório via UnityContainer. Por algum motivo quando a leitura acontece simultaneamente, uma thread resolve o lazy do relacionamento e a outra não consegue.

    Obrigado, se tiver outra solução mais apropriada (Ex: Timer, outra forma de injeção) fico grato.

    quarta-feira, 18 de janeiro de 2017 16:00