2014-02-11 2 views
1

Я изменяю старую, большую (и не документированную) программу на C#, которая использует API для разговора по последовательной шине.запускать другие части кода для продолжения (C#)

Есть ли способ разрешить OnIndication триггер SendRepeatRequest для продолжения? Я бы хотел избежать опроса флага с ожиданием Xms, поскольку время отклика сильно варьируется, и мне нужны быстрые ответы.

//Pseudocode 
public void SendRepeatRequest(int X) 
{ 
    SendToAPI(); 
    // Wait until API responds, usually a few ms but can take 1-2min 
    // loop X times 
} 

//this is activated by the API response 
public void OnIndication() 
{ 
// Handle request from API... 
// Tell SendRepeatRequest to continue 
} 

Есть ли у вас какие-либо предложения о том, как это сделать? Спасибо!

+0

Выполняется ли 'OnIndication' на другой поток, чем' SendRepeatRequest'? – wdosanjos

+0

Они работают в той же теме, насколько я могу судить. – Fousk

+0

Итак, возможно, вам нужно установить флажок в OnIndication и проверить этот флаг в цикле ожидания SendRepeatRequest. – wdosanjos

ответ

0

Возможно, вы захотите изучить библиотеку задач (представленную в .NET 4.0 в пространстве имен System.Threading.Tasks). У этого есть множество операций нарезки, чтобы сделать это довольно легко.

Я полагаю, что следующий раздел может помочь (или начать работу).

public void OnIndication() 
{ 
Task doWork = new Task(() => 
    { 
     // Handle request 
    }); 

    Action<Task> onComplete = (task) => 
    {     
     SendRepeatRequest(X, args) 
    }; 

    doWork.Start(); 

    doWork.ContinueWith(onComplete, TaskScheduler.FromCurrentSynchronizationContext());      
} 
+0

Это не похоже на проблему, описанную OP. – Servy

+0

Я не совсем думаю, что это работает, но я могу ошибаться. Я думал о чем-то вроде: 'public void SendRepeatRequest (int X) {SendToAPI(); resp_flag = 0; // wait до flag == 1 // Отправить следующий запрос} public void OnIndication() {// Обработать запрос от API ... flag == 1; } Но избегайте функции ожидания. ' – Fousk