我有一个电话,我需要等待才能继续。这是opportunitySet的初始创建,我遇到了将此转换为等待任务的问题。
_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工具包中提供的插入。这确实是插入的,但是当程序到达终点时,通常不会创建所有的机会。
答案 0 :(得分:-1)
制作方法时,请务必将其标记为“异步”。然后在调用它时不要使用关键字“await”,你将得到它的任务。从他们可以调用yourTask.Wait()。这将等到该方法的执行完成后才会结束。
答案 1 :(得分:-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
}
更新&gt;&gt;&gt;
您可以在Silverlight中使用Task.Wait
method。如果您查看MSDN上的How to: Wait on One or More Tasks to Complete页面,您可以了解它是如何完成的。此页面仅适用于.NET 4和4.5,因此我不知道它是否可以与Silverlight一起使用,但您可以尝试。您仍然可以像我在上面的示例中向您展示的Task
中使用您的方法。