У меня нет проблем с использованием async/ await вплоть до точки входа моего уровня C#, но мне нужна помощь в понимании наилучшего способа продолжения асинхронности на всем пути вверх по стеку вызовов.
Чрезвычайно Упрощенный обзор моего приложения:
Код: Выделить всё
C++
-------
int main(int argc, char* argv[])
{
// Do some initialization steps
CreateWorker();
// Do some deinitialization steps
}
void CreateWorker()
{
// Create a new thread which will do the processing
THREADHANDLE threadHandle = m_workerThread.createThread((THREADPROC)WorkerThread, this);
}
int WorkerThread(void * argPtr)
{
// Start the work
(MyObject)* myObject = (MyObject*)argPtr;
myObject->DoWork();
return 1;
}
void MyObject::DoWork()
{
MyMediator mediator;
mediator->ProcessWork();
}
Код: Выделить всё
C++/CLI
----------
void MyMediator::ProcessWork()
{
DotNetProvider provider = gcnew DotNetProvider();
provider->Execute();
}
Код: Выделить всё
C#
---------
string DotNetProvider::Execute()
{
string ret = await DoAsyncWork();
return ret;
}
async Task DoAsyncWork()
{
// Do some work with C# channels here
await channel.Writer.WriteAsync(somedata);
}
Спасибо!
Подробнее здесь: https://stackoverflow.com/questions/791 ... ough-c-cli
Мобильная версия