2016-09-09 3 views
0

여기에 C#에서 azure documentdb 저장 프로 시저를 실행하려고합니다. Azure DocumentDB 비동기 요청 문제

static string EndpointUri = "https://asdf.documents.azure.com:443/"; 
    static string PrimaryKey = "X"; 
    static DocumentClient client = new DocumentClient(new Uri(EndpointUri), PrimaryKey); 

    static void Main(string[] args) 
    { 
     var x = doit(); 
     Read(); 
    } 
    public static async Task<string> doit() 
    { 

     StoredProcedureResponse<string> sprocResponse = await client.ExecuteStoredProcedureAsync<string>("/dbs/eew/colls/fff/sprocs/ggg/", "[email protected]"); 
     return ""; 
    } 

나는 동기를 실행하는 메소드 호출 ExecuteStoredProcedureAsync을 원했다. 여기 내가 어떻게 그랬어.

나는 이것이 요청을 기다리고 있기 때문에 동기 메서드 호출로 작동해야한다고 생각합니다. 그러나 그것은 그런 식으로 작동하지 않습니다.

비동기에 대한 이해가 부족하다는 이유로 C# 사용을 기다리고 있습니다.

Google에서 해결할 수있는 방법을 찾을 수 없습니다.

어떻게 동기화 할 수 있습니까?

+0

아마도 지금 Azure에서 키를 변경하고 싶을 것입니다. 당신은 방금 데이터베이스를 만들고 귀하의 계정에 돈을 쓰는 인터넷 액세스를 부여했습니다 :) – Frans

+0

@Frans Thanks !. 하지만 게시하기 전에 일부 문자를 변경했습니다. 나는 그 바보가 아니다 :). –

+0

안녕하세요, 일반적인 조언; 게시하기 전에 그냥 xxx로 변경하는 것이 가장 좋습니다. 기껏해야 당신이 나 같은 사람들을 걱정스럽게합니다. 최악의 경우, 암호를 사용하는 사람에게 암호를 강제로 사용하는 사람이 생깁니다. 계정에 생산 데이터가 있고 난 당신의 CSO 였으면 이제는 바뀌어야한다고 주장 할 것입니다. :) – Frans

답변

0

변경

var x = doit(); 

var x = doit().Result; 

참고로; 이 간단한 콘솔 응용 프로그램에서는 정상적으로 작동하지만 실제 응용 프로그램에서는 교착 상태가 발생할 수 있습니다. 실제 응용 프로그램에서 동기화해야하는 경우 이와 같은 작업을 수행해야합니다. 이 문제를 설명하면서

var x = Task.Run(() => doit()).Result; 

내가 쉽게 죄송합니다, SO 대답에 넣어 수있을 것입니다 무엇을 넘는다. Pluralsight에 액세스 할 수 있다면 Jon Skeet의 훌륭한 설명 인 https://www.pluralsight.com/courses/skeet-async입니다. 그렇지 않으면 C# (온라인 설명서) 또는 온라인 자습서.

+0

.NET의 비동기 패턴에 대해 이야기하는 Stephen Cleary의 훌륭한 기사도 있습니다. 한 가지 예가 있습니다 : http://blog.stephencleary.com/2012/07/dont-block-on-async-code.html –

+0

@ 리우 예, 좋은 외침, 그들은 아주 좋습니다. – Frans

관련 문제