2017-11-17 6 views
0

웹 API 서비스에 내 개체를 게시하고 ReturnedResults 유형의 개체를 반환하는 데 사용되는 보내기 메서드가있는이 API 클라이언트가 있습니다. 이제이 post 메서드를 ASP.net page_load 이벤트에서 실행해야합니다. 여기 비슷한 예제를 보았습니다. 그러나 필요한 것은 비동기 메서드에서 반환 객체를 가져 오는 것입니다.ASP.Net : Page_Load에서 async 메서드 호출

내가 내가 내가이 문제가 발생하지만, 처음 PageAsyncTask 유효한 작업 유형으로 내 보내기 방법을지지 않습니다

PageAsyncTask t = new PageAsyncTask(APIService.Send("test")); 

를 사용하기로하고 있음을 알고, 내 방법의 작업을 반환하기 때문에 그 것 같아요 작업 형식을 System.Func로 변환 할 수 없다는 불만이 있습니다.

또한 성공적으로 실행되면 내 ReturnedResults 개체를 어떻게 얻을 수 있습니까?

+3

는 https://stackoverflow.com/questions/35899800/can-page-load-be-async 나는 그들 중 누구도 내 경우에 도움이되지 않습니다, 그 기사를 본 적이 있지만 – Mike

+0

덕분에, 나는를 얻을 필요 결과는 내 비동기 메서드에서 발생하며 동시에 비동기 메서드에 대한 대기가 끝날 때까지 페이지로드를 일시 중지합니다. – user65248

+0

Page_Load에 무거운 하중 메소드를 두는 것이 이상적입니다. 나는 당신의 요구 사항이 어떤지 잘 모르겠습니다. 그러나 시스템 설계를 수정해야 할 수도 있습니다. – Mike

답변

2

PageAsyncTask의 결과를 기다릴 수 없기 때문에 작업 자체가 기다릴 수있는 더 많은 기능을 시작할 수 없다는 것을 의미하지는 않습니다. 이 기능을 활용하면 비동기 페이지로드가 발생할 수 있습니다.

public void Page_Load(object sender, EventArgs e) 
{ 
    RegisterAsyncTask(new PageAsyncTask(PageLoadAsync)); 
} 

public async Task PageLoadAsync() 
{ 
    //perform your actions here, including calling async methods and awaiting their results 

    Task<string> downloadTask = new WebClient().DownloadStringTaskAsync("http://www.example.com"); 

    TextBox1.Title = "We can do some actions while waiting for the task to complete"; 

    TextBox2.Title = await downloadTask; 
} 

페이지가 비동기로 표시되어 있는지 확인하십시오.

<%@ Page Language="C#" CodeBehind="Default.aspx.cs" Inherits="Default" Async="true" %> 
+0

감사합니다, 이것은 좋은 해결책 인 것 같습니다. 그러나 메소드에 인수를 추가하면 PageAsyncTask가이를 받아 들일 수 없으며 "Task를 System.Func로 변환 할 수 없습니다"오류가 발생합니다. 내가 API에 게시하기 전에 물건을 처리해야하므로 인수가 필요합니다. – user65248

+0

@ user65248 요점을 놓치고 있습니다. 비동기 메서드를 호출하는 PageLoadAsync 메서드에 인수를 직접 넣습니다. 실제로 PageLoadAsync에 인수를 전달할 필요는 없습니다. – mason

+0

나는이 새로운 Func (async() => Arguments)과 같은 lambda 함수를 실행하여 관리 할 수 ​​있었지만, 이제는 화재라고 생각하고 내 작업을 잊어 버렸습니다. page_load를 일시 중지해야합니다. 작업이 끝날 때까지 다른 물건을 계속로드하면 결과에 따라 DB에 저장할 수 있습니다. 아마도 여기 잘못된 경로를 사용하고있을 수도 있습니다. – user65248