2014-10-14 2 views
0

Im работает со сценарием в C# .net, где Im загружает страницу, и во время этого события pageload вызывается служба, чтобы заполнить значение, которое используется для diplay на странице ,Метод принимает значительное количество времени, чтобы вернуть значения

На этой странице также есть другие поля. Поэтому проблема заключается в том, что для возврата значения обычно требуется от 30 до 60 секунд, другие поля не могут быть выбраны до тех пор, пока эта служба не вернет значение. Таким образом, есть также кнопка «СОХРАНИТЬ», которую нельзя щелкнуть, поскольку мы все еще ожидаем, что эта служба вернет значение.

Проблема, которую я пытаюсь решить здесь, в идеале, на pageload, я хочу, чтобы эта служба запускалась на фоне и позволяла другим полям заполнять значение, и я должен иметь возможность выполнять другие события, такие как SAVE, NEXT PAGE, PREVIOUS PAGE и т. Д. При вызове.

Цель значения, возвращаемого службой, только для справки. Код не имеет никакой зависимости от этого значения.

+0

Есть ли асинхронный метод, который можно использовать для вызова службы? еще создать свой собственный? – Xela

+0

Используйте 'await' для вызова async-задачи –

+0

Можем ли мы увидеть код? – Xela

ответ

0

Если у вашего сервиса есть метод, позвоните ему, выполнив асинхронный обратный вызов onpageload и ожидайте асинхронного метода внутри него.

Если служба не имеет метод асинхронной для вызова вы можете создать свой собственный, например:

public string DownloadStringAsync() 
    { 
     return "Test data"; 
    } 

    public async Task<string> ReceiveStringAsync() 
    { 
     return await Task<string>.Run(() => 
     { 
      //Method to download your data 
      return DownloadStringAsync(); 
     }); 
    } 

и ждать его в загрузке страницы: sting data = await ReceiveStringAsync();

Вы не предоставляют достаточно информации/код для лучшего ответа.

0

Вы можете попробовать выполнить его в потоке. Что-то вроде этого

Thread runner = new Thread(() => 
    { 
     // run service call here 
    }); 
    runner.IsBackground = true; 
    runner.Start(); 

Но в C# 4.0 есть новый параллелизм задач библиотеки, так что вы можете прочитать о том, что и перейти оттуда, технически задача как нить, но разница в том, что задача может иметь продолжение а также управляет пулом потоков.

Читайте TPL здесь: Task Parallelism Library

Смежные вопросы