我正在研究.NET 4.0中的Web Hook,它将异步运行lambda,然后在结束时将结果发布到给定的URI.
我有这个工作,但现在我希望任务处理任何抛出的异常,并发现很难阻止它们到达父级.
这是我的代码的一部分:
private readonly Func<T> _startTask;
private readonly string _responseUri;
public Task<T> Begin()
{
var task = new Task<T>(_startTask);
task.ContinueWith<T>(End);
task.Start();
return task;
}
private T End(Task<T> task)
{
if (task.IsFaulted)
{
return HandleException(task);
}
var result = task.Result;
WebHookResponse.Respond(result, _responseUri);
return result;
}
private T HandleException(Task<T> task)
{
WebHookResponse.HandleException(task.Exception.InnerException, _responseUri);
return null;
}
Run Code Online (Sandbox Code Playgroud)
我尝试过的另一个版本调用ContinueWith()两次来注册一个继续运行OnlyOnRanToCompletion和一个运行OnlyOnFaulted.(我不确定ContinueWith()两次打电话是否正确.):
public Task<T> Begin()
{
var task = new Task<T>(_startTask);
task.ContinueWith<T>(End, TaskContinuationOptions.OnlyOnRanToCompletion);
task.ContinueWith<T>(HandleException, …Run Code Online (Sandbox Code Playgroud) 如果我有一个包含嵌入式部门的公司集合:
{
"_id": 1
"_t": "Company",
"Name": "Test Company"
"Divisions": [
{
"_id": 1
"_t": "Division",
"Name": "Test Division 1"
},
{
"_id": 2
"_t": "Division",
"Name": "Test Division 2"
}
]
}
Run Code Online (Sandbox Code Playgroud)
使用官方10gen C#驱动程序时保存/更新整个部门的最佳方法是什么?(最新的0.9版本.)
我正在使用Update.AddToSetWrapped来添加Divisions,这很好用,但我也希望能够根据它们的_id更新文档.
例如,如果我定义以下Update方法:
public void UpdateDivision(IDivision division)
{
var mongo = MongoServer.Create(_connectionString);
var database = mongo.GetDatabase(_databaseName);
var query = Query.EQ("_id", division.CompanyId);
var update = Update.AddToSetWrapped("Divisions", division);
database.GetCollection<Company>("Company")
.Update(query, update, UpdateFlags.Upsert, SafeMode.True);
}
Run Code Online (Sandbox Code Playgroud)
并称之为:
var division = GetDivisionById(1);
division.Name = "New Name";
UpdateDivision(division);
Run Code Online (Sandbox Code Playgroud)
然后将一个新的Division实例添加到集合中,因为虽然"_id"仍然是1,但Name是不同的,因此它是一个唯一的文档.
那么有什么更新整个嵌入式文档的好方法呢? …