Есть ли лучшие практики для реализации асинхронной цикл игрового движка?

Я реализовал цикл игрового движка следующим образом:

public static Boolean Start ( )
{
    if (hasBoard)
    {
        //  start engine on worker thread
        asyncTask = new AsyncResult ( stopEngine, asyncTask );
        isRunning = ThreadPool.QueueUserWorkItem ( startEngine, asyncTask );

        if (isRunning)
        {
            Console.WriteLine ( "[{0}] Engine started",
                DateTime.Now.ToString ( "hh:mm:ss" ) );
        }
        else
        {
            Console.WriteLine ( "[{0}] Engine failed to start",
                DateTime.Now.ToString ( "hh:mm:ss" ) );
        }
    }

    return isRunning;
}

public static void Stop ( )
{
    Console.WriteLine ( "[{0}] Engine stopping",
        DateTime.Now.ToString ( "hh:mm:ss" ) );

    asyncTask.SetAsCompleted ( null, false );
}

private static void startEngine ( Object task )
{
    while (!( (IAsyncResult)task ).IsCompleted)
    {
        Thread.Sleep ( 10000 );

        Console.WriteLine ( "[{0}] Engine running",
            DateTime.Now.ToString ( "hh:mm:ss" ) );
    }
}

private static void stopEngine ( IAsyncResult iaResult )
{
    //  clean up resources

    Console.WriteLine ( "[{0}] Engine stopped", 
        DateTime.Now.ToString ( "hh:mm:ss" ) );

    isRunning = false;
}

Я использую AsyncResult Класс, рекомендованный Джеффом Рихтером в его статье Реализация модели асинхронного программирования CLR . Чтобы иметь возможность останавливать движок из пользовательского интерфейса, я использовал реализацию, немного отличавшуюся от стандартного асинхронного шаблона. реализация работает должным образом, но когда я отклоняюсь от стандартной практики, я возвращаюсь к сообществу SO, чтобы убедиться, что все делаю правильно.

Есть ли какие-либо проблемы с этой реализацией, которые кто-либо может увидеть?

7
задан Cody Gray 2 January 2011 в 04:24
поделиться