2013-11-25 35 views
0

我有一個電話,我需要等待完成才能繼續。這是一個beginSet創建一個opportunitySet,我有問題將其轉換爲等待的任務。如何從asyc發送任務

_context.BeginSaveChanges(OnCreateOpportunityComplete, _context.OpportunitySet); 


/// <summary> 
/// Callback method invoked when Account is done being created. 
/// </summary> 
/// <param name="result"></param> 
private void OnCreateOpportunityComplete(IAsyncResult result) 
{ 
    try 
    { 
     _context.EndSaveChanges(result); 
     Opportunity createdOpportunity = result.AsyncState as Opportunity; 
     BeginRetrieveOpportunity(createdOpportunity.OpportunityId); 
    } 
    catch (SystemException se) 
    { 
     _syncContext.Send(new SendOrPostCallback(showErrorDetails), se); 
    } 
} 

private void BeginRetrieveOpportunity(Guid _id) 
{ 
    try 
    { 
     DataServiceQuery<Opportunity> query = (DataServiceQuery<Opportunity>)_context 
       .OpportunitySet.Where<Opportunity>(o => o.OpportunityId == _id); 
      query.BeginExecute(OnRetrieveOpportunityComplete, query); 

    } 
    catch (DataServiceQueryException dsqe) 
    { 
     _syncContext.Send(new SendOrPostCallback(showErrorDetails), dsqe); 
    } 
} 

有沒有人知道如何處理這個問題?我已經嘗試了很多次,創建任務時似乎存在一些問題。或者,如果還有其他方法可以等待創建集合中的多個機會,那麼這也是非常棒的。

編輯:爲了澄清,代碼中的第一行是我主要功能中的一行,在收集了所有我想要添加的機會後,我調用create方法來調用CRM套件中提供的插入。這確實會插入,但是在程序到達結尾時,往往不是所有的機會都沒有被創建。

+1

你看過TaskFactory的.FromAsync方法嗎? – Ben

+0

這就是我最初嘗試過的,但在創建任務時遇到問題。初始化給我帶來了麻煩,然後當我想我得到它時「非泛型類型'MySolution.ServiceReference.Task'不能與類型參數一起使用」... –

回答

-1

製作你的方法時,一定要標記爲「async」。然後,在調用它時不要使用關鍵字「await」,您將獲得其任務。從他們你可以調用yourTask.Wait()。這將等到該方法的執行完成。

-1

我真的不知道你想做什麼方法async,因爲你的問題有點不清楚,但是如果你遵循這個簡單的方法,你應該可以自己製作方法async。比方說,你開始用這種方法:

private int DoSomething(int someValue) 
{ 
    ... 
} 

我們可以以這種方式與async運行:

private async int DoSomethingAsync(int someValue) 
{ 
    int result = await Task.Run(() => DoSomething(someValue)); 
    // Do something with result here when it arrives 
} 

UPDATE >>>

您可以在Silverlight使用Task.Wait method 。如果您看一下MSDN上的How to: Wait on One or More Tasks to Complete頁面,您可以瞭解它是如何完成的。此頁面僅適用於.NET 4和4.5,因此我不知道它是否可以與Silverlight一起使用,但您可以嘗試。你仍然可以在Task中使用你的方法,就像我在上面的例子中展示的那樣。

+0

不幸的是我運行VS 2010,異步似乎不與VS的更高版本一樣強大。 –

+0

也使用Silverlight 4 –