小编Mar*_*wen的帖子

我希望Task能够处理抛出的任何异常,但我发现很难阻止它们到达父级

我正在研究.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)

.net c# exception-handling .net-4.0 task-parallel-library

8
推荐指数
1
解决办法
1万
查看次数

使用官方C#驱动程序更新MongoDB中的嵌入式文档

如果我有一个包含嵌入式部门的公司集合:

{ 
  "_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是不同的,因此它是一个唯一的文档.

那么有什么更新整个嵌入式文档的好方法呢? …

.net c# mongodb mongodb-.net-driver

5
推荐指数
1
解决办法
7788
查看次数