我们目前看到很多TaskCanceledException被抛弃MS.Internal.ShutDownListener.HandleShutDown.这开始于5月中旬,可能与.Net或Windows 10的一些更新有关.我们在旧版本(〜2岁)和我们软件的新版本中看到了它,它刚刚开始在所有版本中启动.我们的目标是.Net 4客户端配置文件与旧版本和.Net 4.5.1与更新版本.
完整的堆栈跟踪是:
位于System.Windows.Threading的System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务任务)的System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(任务任务)的System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(任务任务)上的TaskCanceledException. DispatcherOperation.Wait(时间跨度超时)在System.Windows.Threading.Dispatcher.InvokeImpl(的DispatcherOperation操作,的CancellationToken的CancellationToken,时间跨度超时)在System.Windows.Threading.Dispatcher.Invoke(动作回调的DispatcherPriority优先的CancellationToken的CancellationToken,时间跨度超时)在MS.Internal.WeakEventTable.OnShutDown()at MS.Internal.ShutDownListener.HandleShutDown(Object sender,EventArgs e)
问题是:导致这种情况的原因是什么?
现在,我们正在寻找找到根本原因的方法,并最终解决这个问题.当然,我们最终可以简单地抓住它,但这不是一个真正的解决方案.欢迎任何方向提示.我们希望更新此问题,因为我们可以获得更多洞察力,以便能够为以后遇到此类问题的人提供信息.
为什么以及何时应该分别使用int, int16, int32, int64, double,string来代替Int, Int16, Int32, Int64, Double, String?我已经准备了很多关于此的文章,但仍然没有得到适当的解决方案。
是否可以检查存储的类型是否PropertyInfo是原始的?
例如,我想这样做:
// from and to are both objects declared in the parameters.
Type fType = from.GetType();
Type tType = to.GetType();
PropertyInfo[] fmpi = fType.GetProperties();
PropertyInfo[] tmpi = tType.GetProperties();
foreach(var pi in tmpi)
{
if (pi.CanWrite)
{
var fpi = fmpi.SingleOrDefault(item => item.Name.ToLower() == pi.Name.ToLower());
if (pi.GetType().IsPrimitive || pi.GetType() == typeof(string))
{
pi.SetValue(to, fpi.GetValue(from, null));
}
}
}
Run Code Online (Sandbox Code Playgroud)
每当我执行此代码时,它都不会通过ifstatemenet.主要原因是每当我这样做pi.GetType()时都说它是一个PropertyInfo.这很明显,因为它被声明为PropertyInfo.但我希望你明白这个主意.
我还发现它pi.PropertyType.Name包含了属性的实际类型的名称.无论如何我可以IsPrimitive在这家酒店执行吗?如果没有,是否有任何工作让我这样做?
我检查了如何测试Type是原始的但是在这种情况下用户正在使用直接类型而我正在使用PropertyInfo.
使用[JsonProperty(Required = Required.Always)]注释我的模型的属性,我可以检查属性值是否不为空。
对于字符串,我也想检查空值。在 Json.NET 中使用属性时,有没有办法检查字符串属性值是否为空?或者还有其他方法吗?
这个 JSON 应该会引起问题
{
"Property1": "",
...
}
Run Code Online (Sandbox Code Playgroud) 我很难理解为什么List<T>FindAll(...)方法不接受Func<TSource, bool>,而是坚持接受Predicate<TSource>.
因此,当我有一List本书时,我只想获得比10便宜的书.这个代码运行得很好.
Predicate<Book> CheapBooksPredicate = b => b.Price < 10;
var cheapBooksPredicate = books.FindAll(CheapBooksPredicate);
Run Code Online (Sandbox Code Playgroud)
但是当我换Predicate<TSource>到Func<TSource, bool>
Func<Book, bool> CheapBooksFunc = b => b.Price < 10;
var cheapBooksFunc = books.FindAll(CheapBooksFunc);
Run Code Online (Sandbox Code Playgroud)
我收到错误:
参数1:无法从'System.Func'转换为'System.Predicate'
我在这里失踪了什么?当两个Func<TSource, bool>和Predicate<TSource>的predicates.Predicate<TSource>应该是a的专用版本,Func它根据一组条件获取和计算一个值并返回一个布尔值,因此我可以在使用方面相互替换它们.