小编Red*_*dth的帖子

等待具有OnlyOnFaulted Continuation的任务会导致AggregateException

我有一些简单的代码作为repro:

var taskTest = Task.Factory.StartNew(() =>
{
    System.Threading.Thread.Sleep(5000);

}).ContinueWith((Task t) =>
{
    Console.WriteLine("ERR");
}, TaskContinuationOptions.OnlyOnFaulted);

try
{
    Task.WaitAll(taskTest);
}
catch (AggregateException ex)
{
    foreach (var e in ex.InnerExceptions)
        Console.WriteLine(e.Message + Environment.NewLine + e.StackTrace);
}
Run Code Online (Sandbox Code Playgroud)

但是,我在try catch块中抛出一个意外的TaskCanceledException(它在AggregateException InnerExceptions对象中)."任务被取消了".

为什么我得到这个例外?任务的Continuation永远不会触发,它没有生成任何异常,但在等待时我仍然得到聚合异常....

我希望有人能解释一下这对我有多大意义:)

c# parallel-processing task pfx task-parallel-library

38
推荐指数
1
解决办法
6989
查看次数

MongoDB C#Driver中的BsonValue和自定义类

我正在尝试使用$pushc#驱动程序在mongodb中的更新查询中使用.

Update.Push(...)方法需要一个字符串名称(这很好),并且BsonValue需要"推送".这是我遇到问题的地方.我正在尝试将非简单类型推送到字段的数组.

例如: { $push : { "arrayfield" : { "a" : 7, "b" : 12 } } }

这在Mongo控制台中运行良好,但我无法弄清楚如何将我的对象变成BsonValue.我试过BsonValue.Create(myObjectInstance)但是这给了我一个错误,说.NET类型无法映射到BsonValue.

我错过了一些简单的事吗?

c# mongodb mongodb-.net-driver

13
推荐指数
1
解决办法
8139
查看次数

.NET/Windows Server中的最大传出套接字连接

我有一个稍微不寻常的情况,我需要在我的服务器上为成千上万的移动用户维护CLIENT tcp连接到另一台服务器(基本上移动设备能够连接到我的中间层服务器,这样可以保持更稳定的连接到移动设备的第三方服务器).

无论如何,我使用异步套接字(包含在SslStream中)开发了我的服务器应用程序,并且现在有1000个客户端会话全时运行.我对结果感到非常满意,因为我看到单核处理器的平均CPU使用率为0-10%,并且随着时间的推移大约使用了60mb的ram.

我的问题是,如何扩展它以便我可以在我的服务器上运行100,000或200,000或更多客户端会话?同样,这有点非传统,因为我的服务器并不像服务器那样,因为我担心传出的连接,而不是传入.

我知道有一个注册表设置MaxUserPort需要更改,以超出默认值,似乎是5000.但是,似乎有另一个硬限制65535,我不太清楚该限制所在的位置.这是每个网络接口的限制吗?它是全局Windows限制吗?这是每个流程的限制吗?

如果它是每个网络接口的限制,我可以添加多个网络接口并将客户端会话套接字绑定到每个接口(例如:接口1上的65k,接口2上的65k等)?

我也不太清楚是什么,如果有任何套接字选项或属性我应该设置来帮助解决问题.现在我没有使用任何套接字选项.

我真的很感激有关这个问题的任何想法,因为在这个问题上很难得到明确的建议.谢谢!

.net c# sockets windows windows-server-2003

12
推荐指数
1
解决办法
6900
查看次数

流媒体音频MMS://到iPhone

我想将一个流式传输mms:// url到我的iPhone应用程序,但到目前为止很难获得有关该主题的信息.我知道有几个应用程序可以做到(FStream,WunderRadio,Tuner),我已经阅读了一些关于它们的说明,可能使用libmms和ffmpeg来完成这项任务.

有谁知道实现这一目标的方法?那里有一个我缺少的图书馆,或者已经有一些例子吗?我希望这会像简单一样容易

[someLibrary streamMMSUrl:@"mms://mymmsurlhere.com"]

谢谢你的帮助!

iphone streaming mms

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

Gmail IMAP:以任何方式查找特定邮件所在的所有标签(文件夹)?

所以,Gmail的IMAP有点'怪异'.他们使用IMAP文件夹来表示标签.我通常认为IMAP中的电子邮件只能属于一个"文件夹",但是对于Gmail,电子邮件可以属于许多"文件夹",这使我们能够非常接近标签.

我的问题是,我正在编写一个gmail客户端(因此像Starring,删除和存档这样的工作比标准的imap客户端更直观),但我希望能够显示给定的电子邮件,哪些文件夹(标签)它在.

据我所知,这并不容易(我必须遍历每个文件夹中的每条消息,看看它在哪些中).

有谁知道一个整洁的方法来做到这一点?或者我是否正确地假设没有简单的方法?

gmail imap gmail-imap

7
推荐指数
1
解决办法
2977
查看次数

添加新项目后调用Requery后,带有CursorAdapter的Android ListView具有不正确的滚动位置

这是场景:我有一个简单的ListView显示Twitter提要.我有一个CursorAdapter,它从sqlite中获取推文.当我在光标上调用requery()时,我希望将获取新的推文,这些推文已经被添加到数据库中.这一切都很好,在这种情况发生后,新的项目甚至可以在ListView中看到.

问题是滚动位置似乎是根据项目位置偏移量保存的.因此,假设我的ListView中的第一个可见位置是4.当我重新查询并且将2个新项目添加到列表顶部时,ListView将第一个可见项目滚动位置保持为4,但是因为列表中有两个新项目,我现在在第4位看到与我刷新之前不同的项目.此图像说明了之前和之后: 在此输入图像描述

请注意Before,Tweet D是第一个可见项目,之后,Tweet B现在成为第一个可见项目.

我的问题是,在调用requery时如何根据光标位置保持相同的滚动位置,这样在这个例子中,Tweet D仍然是重新查询后的第一个可见项?

android xamarin.android android-listview android-cursoradapter

7
推荐指数
1
解决办法
1605
查看次数

C#中的OAuth作为客户端

我已经获得了6位信息来访问网站上的一些数据:

  1. 网站Json Url(例如:http://somesite.com/items/list.json)
  2. OAuth授权URL(例如:http://somesite.com/oauth/authorization)
  3. OAuth请求网址(例如:http://somesite.com/oauth/request)
  4. OAuth访问URL(例如:http://somesite.com/oauth/access)
  5. 客户密钥(例如:12345678)
  6. 客户秘密(例如:abcdefghijklmnop)

现在,我已经看过DotNetOpenAuth和OAuth.NET库,虽然我确信他们非常有能力做我需要的东西,但我无法弄清楚如何以这种方式使用它们.

有人可以发布一些示例代码,说明如何在任一库中使用Url(第1点)(或任何其他可能同样有效的方式)?

谢谢!

.net c# oauth

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

查找2个巨区(文本)文件之间的更改

我可以访问.com区域文件.区域文件是一个文本文件,其中包含域名列表及其名称服务器.它遵循以下格式:

mydomain NS ns.mynameserver.com.
mydomain NS ns2.mynameserver.com.
anotherdomain NS nameservers.com.
notinalphadomain NS ns.example.com.
notinalphadomain NS ns1.example.com.
notinalphadomain NS ns2.example.com.
Run Code Online (Sandbox Code Playgroud)

如您所见,每个域可以有多行(当有多个名称服务器时),并且文件不是 按字母顺序排列的.这些文件大小约为7GB.

我正在尝试获取上一个文件和新文件,并将它们进行比较以查找:

  1. 添加了哪些域名
  2. 删除了哪些域名
  3. 哪些域名更改了域名服务器

由于7GB太大而无法将整个文件加载到内存中,显然我需要在流中读取.我目前认为最好的方法是对两个文件进行多次传递.字母表中每个字母的一次传递,加载第一次传递中以'a'开头的所有域.一旦我从旧文件和新文件中获得了所有"a"域,我就可以在内存中进行非常简单的比较来查找更改.

问题是,即使通过char读取char,并按照我能够想到的优化,每次传递文件大约需要200-300秒,收集当前传递字母的所有域.因此,我认为在当前状态下,我正在查看大约一个小时来处理文件,甚至没有将更改存储在数据库中(这将花费更多时间).这是在双四核xeon服务器上,因此对它投入更多的马力对我来说不是一个选择.这个时间可能不是一个交易破坏者,但我希望有人对如何加快速度提出一些明智的想法......不可否认,我还没有尝试过async IO,这是我的下一步.

提前感谢任何想法!

.net c# text large-files

6
推荐指数
1
解决办法
1081
查看次数

如何更新MongoDB文档中的数组元素匹配条件?

我有一个带有数组字段的文档,类似于:

{ 
  "_id" : "....",
  "Statuses" : [
    { "Type" : 1, "Timestamp" : ISODate(...) },
    { "Type" : 2, "Timestamp" : ISODate(...) },
    //Etc. etc.
  ]
}
Run Code Online (Sandbox Code Playgroud)

如何通过指定其类型值来更新特定状态项的时间戳?

mongodb

6
推荐指数
2
解决办法
6723
查看次数

Socket.EndRead 0字节意味着断开连接?

我想知道在c#中的异步套接字中,在EndRead调用中接收0个字节意味着服务器实际上已经断开了我们的连接吗?

我看到的很多例子都表明情况就是这样,但我收到的断线频率要高得多.

这段代码是否正确?或者endResult <= 0对连接状态没有任何意义?

private void socket_EndRead(IAsyncResult asyncResult)
{ 
  //Get the socket from the result state
  Socket socket = asyncResult.AsyncState as Socket;

  //End the read
  int endResult = Socket.EndRead(asyncResult);

  if (endResult > 0)
  {
    //Do something with the data here


  }
  else
  {
    //Server closed connection?  
  }
}
Run Code Online (Sandbox Code Playgroud)

c# sockets asynchronous

4
推荐指数
1
解决办法
4477
查看次数

是否有任何PHP主机(共享)不阻止iPhone Apple推送通知(APNS)的端口2195和2196传出?

我在我自己的机器上使用php工作的iPhone Apple推送通知(APNS).我不阻止端口2195传出,但似乎HostGator确实并且不愿意打开端口.我想象很多网络主机是相同的,但我想知道是否有人发现一个不阻止2195和2196.

我意识到我可以使用VPS来做到这一点,但我想降低成本,我不会发出很多通知,而且我知道我创建的非常简单的PHP脚本可以正常工作.

php hosting push-notification apple-push-notifications

4
推荐指数
1
解决办法
4343
查看次数

C#和PHP中的TripleDES加密不一样(PKCS7,ECB)?

我花了几个小时试图解决这个问题,但我无法让它发挥作用.我有一个C#加密例程,我需要在php中匹配.我无法改变C#版本,这不是一个选项(第三方对此很坚定).

这是C#代码:

//In C#
// Console.WriteLine(ApiEncode("testing", "56dsfkj3kj23asdf83kseegflkj43458afdl"));
// Results in: 
//     XvHbR/CsLTo=
public static string ApiEncode(string data, string secret)
{
  byte[] clear;

  var encoding = new UTF8Encoding();
  var md5 = new MD5CryptoServiceProvider();

  byte[] key = md5.ComputeHash(encoding.GetBytes(secret));

  TripleDESCryptoServiceProvider des = new TripleDESCryptoServiceProvider();
  des.Key = key;
  des.Mode = CipherMode.ECB;
  des.Padding = PaddingMode.PKCS7;

  byte[] input = encoding.GetBytes(data);
  try { clear = des.CreateEncryptor().TransformFinalBlock(input, 0, input.Length); }
  finally
  {
    des.Clear();
    md5.Clear();
  }

  return Convert.ToBase64String(clear);
}
Run Code Online (Sandbox Code Playgroud)

这是我在PHP中提出的最好的东西:

//In PHP
// echo apiEncode("testing", "56dsfkj3kj23asdf83kseegflkj43458afdl");
// Results in: …
Run Code Online (Sandbox Code Playgroud)

php c# encryption cryptography tripledes

3
推荐指数
1
解决办法
5557
查看次数

MySql:使用Prepared语句使用.NET/Connector可以更快地调用存储过程吗?

我一直在阅读有关使用MySql的Prepared语句,并且.NET/Connector确实支持它们.

我想知道的是,如果我使用预准备语句来调用相同的存储过程数千次,那么是否比使用预准备语句更快或更好的性能(因为存储过程应该已经编译好了)?

例如:

var mySqlCmd = new MySqlCommand(con, "call sp_someProcedure(@param1, @param2);");
mySqlCmd.Prepare();
mySqlCmd.Parameters.AddWithValue("@param1", "");
mySqlCmd.Parameters.AddWithValue("@param2", "");

for (int i = 0; i < 1000; i++)
{
    mySqlCmd.Parameters["@param1"].Value = i.ToString();
    mySqlCmd.Parameters["@param2"].Value = i.ToString();
    mySqlCmd.ExecuteNonQuery();
}
Run Code Online (Sandbox Code Playgroud)

.net c# mysql sql prepared-statement

2
推荐指数
1
解决办法
2594
查看次数