Peut-constructeur de l'objet renvoie null?

Nous avons pris le contrôle de certaines .NET 1.1 Service Windows de code qui génère des threads de lire les messages d'une file d'attente (SeeBeyond eGate file d'attente JMS, mais ce n'est pas important) et à son tour, engendre des threads pour traiter le message dans l'application cible de service. Nous sommes continuellement à la rencontre de la logique et les décisions de conception qui est curieux que nous, à n'en pas finir. Voici un exemple, où le message (lsMessage) a été récupéré à partir de la file d'attente et prêt pour le traitement

if(lsMessage != null)
{
    //Initialize a new thread class instance, pass in message
    WorkerThread worker = new WorkerThread(lsMessage);

Process:
    //Start a new thread to process the message
    Thread targetWorker = new Thread(new ThreadStart(worker.ProcessMessage));
    if(targetWorker != null)
    {
        targetWorker.Priority = ThreadPriority.Highest;
        targetWorker.Name = "Worker " + queueKey.ToString();
        targetWorker.Start();

        //wait for worker thread to join back in specified period
        bool isFinished = targetWorker.Join(SYNC_THREAD_TIMEOUT);

        string message = worker.replyMsg;

        if ( !isFinished )  //BF is timeout
        {
            targetWorker.Abort();

            //[obscure developer name] 25/10/2004: calling Join() to wait for thread to terminate.
            //for EAI listener threads problem, ensure no new thread is started 
            //before the old one ends
            targetWorker.Join();

            //prepare reply message
            string errorMsg = string.Format("EAIMsg {0}: BF is timeout. Send sync message back to caller.", worker.messageKey);
            log.Debug(errorMsg);

            message = worker.GenErrorCode(message, errorMsg);
        }

        //Commit message
        MQ.ReceiverCommit(queueKey, worker.messageKey, false);

        //Send back the response to the caller
        MQ.RespondSend(queueKey, message); 
    } 
    else 
    {
        log.Debug(string.Format("Fail to start worker thread to process sync message. Thread returned is null. Sleep for {0} milliseconds.", LIMIT_RESOURCE_SLEEP));
        Thread.Sleep(LIMIT_RESOURCE_SLEEP);
        goto Process;
    }
}

S'il vous plaît ignorer la utilisation d'étiquettes et goto pour le moment, ce n'est pas la question. Notre perplexité est le vérifier si le Fil de l'objet est null juste après l'instanciation. L'instruction else ci-dessous semble suggérer la précédente, les développeurs ont rencontré des situations comme ça avant. Bien sûr, les développeurs à l'origine ont disparu depuis longtemps. Nous voudrions donc savoir, peut le CLR vraiment instancier un objet après l'appel au constructeur et renvoie null? Nous n'avons pas connaissance d'une telle possibilité.

  • Regarde le résultat d'un refactoring de code ou de changement pour moi. Peut-être la construction de la ligne a autre chose comme GetThread().
InformationsquelleAutor icelava | 2009-01-13