我发现了一些使用c#async/ awaitkeywords的异步编程的最佳实践(我是c#5.0的新手).
给出的建议之一是:
稳定性:了解同步上下文
...某些同步上下文是不可重入和单线程的.这意味着在给定时间内只能在上下文中执行一个工作单元.一个例子是Windows UI线程或ASP.NET请求上下文.在这些单线程同步上下文中,很容易使自己陷入僵局.如果从单线程上下文中生成任务,然后在上下文中等待该任务,则等待代码可能会阻止后台任务.
public ActionResult ActionAsync()
{
// DEADLOCK: this blocks on the async task
var data = GetDataAsync().Result;
return View(data);
}
private async Task<string> GetDataAsync()
{
// a very simple async method
var result = await MyWebService.GetDataAsync();
return result.ToString();
}
Run Code Online (Sandbox Code Playgroud)
如果我自己尝试剖析它,主线程会产生一个新线程MyWebService.GetDataAsync();,但由于主线程在那里等待,它等待结果GetDataAsync().Result.同时,说数据准备好了.为什么主线程不继续它的延续逻辑并从中返回字符串结果GetDataAsync()?
有人可以解释一下为什么上面的例子中存在死锁吗?我完全不知道问题是什么......
我读到它的任何地方都说下面的代码应该可行,但事实并非如此.
public async Task DoSomething(int x)
{
try
{
// Asynchronous implementation.
await Task.Run(() => {
throw new Exception();
x++;
});
}
catch (Exception ex)
{
// Handle exceptions ?
}
}
Run Code Online (Sandbox Code Playgroud)
也就是说,我没有抓到任何东西,并且在"投掷"线上得到一个"未处理的例外".我在这里很无能为力.
我的项目设置包括用于库的'jspm'工具和用于打字的'tsd'工具.
在安装了moment的TypeScript d.ts文件(这些)之后,我找不到加载和实际使用时刻实例的方法.
在我的文件中(使用SystemJS模块加载)
/// <reference path="../../../typings/tsd.d.ts" />
import * as moment from "moment";
import * as _ from "lodash";
...
...
const now = (this.timestamp === 0) ? moment() : moment(this.timestamp);
Run Code Online (Sandbox Code Playgroud)
我得到一个" TypeError:时刻不是函数 "
这些定义的结构与lodash相同,工作正常,所以我不知道原因可能是什么.
有人可以帮忙吗?
我试图从Period对象实例中获取Milliseconds(而不是 millis字段)的总量.我尝试过多次转换,因为我找不到任何方法可以轻松实现.
有没有人需要它并设法检索它?
(我需要这个补丁,找出一个负期;负毫秒=负期.)
是否可以在Visual Studio 2017中编辑vuejs的*.vue组件文件,并对HTML,TypeScript和SCSS提供突出显示和智能感知支持?
目前,我将不同的部分分成不同的文件:
<!-- my-component.vue opened in HTML editor -->
<template>
<div> text </div>
</template>
<script src="./path/to/my-component.ts"></script>
<style src="./path/to/my-component.scss"></style>
Run Code Online (Sandbox Code Playgroud) 使用 Visual Studio Community 2017,我在一个 TypeScript 项目中拥有多个子项目,并且每个子项目实际上都是一个独立的项目,拥有它所需的一切,其中包括它自己的tsconfig.json,例如:
{
"extends": "./../../../tsconfig.json",
"compilerOptions": {
"baseUrl": "./src/scripts/application",
"paths": {
"@vuex-store/*": [ "store/*" ]
}
}
}
Run Code Online (Sandbox Code Playgroud)
可以看到,它继承自最顶层的tsconfig.json:
{
"compilerOptions": {
"allowSyntheticDefaultImports": true,
"allowUnreachableCode": false,
"allowUnusedLabels": false,
"emitDecoratorMetadata": true,
"experimentalDecorators": true,
"lib": [
"dom",
"es2017"
],
"module": "commonjs",
"moduleResolution": "node",
"noImplicitAny": true,
"noResolve": false,
"removeComments": false,
"skipLibCheck": true,
"sourceMap": true,
"suppressImplicitAnyIndexErrors": true,
"target": "es2017",
"typeRoots": [
"node_modules/@types"
]
},
"exclude": [
".awcache",
".tsc",
"bin",
"node_modules",
"obj",
"**/*.spec.ts"
],
"include": [
"src/**/*.ts",
"@types/**/*.d.ts" …Run Code Online (Sandbox Code Playgroud) 我有以下代码,我创建的代码用于更改OpenCV图像(Cv :: Mat类)中像素的强度.
正如您所看到的,我在两种情况下循环,但使用不同的模板类型.
'transfer'功能可以重载.
因此,我的问题是,如何创建动态模板类型以使其看起来更好..
Mat mat = _mat.clone() ;
int channels = mat.channels();
switch(channels)
{
case 1:
for (int i=0; i<mat.rows; i++)
{
for (int j=0; j<mat.cols; j++)
{
uchar src = mat.at<uchar>(i,j);
uchar dst = mat.at<uchar>(i,j);
t.transfer(src, dst);
}
}
break;
case 3:
for (int i=0; i<mat.rows; i++)
{
for (int j=0; j<mat.cols; j++)
{
Vec3b src = mat.at<Vec3b>(i,j);
Vec3b dst = mat.at<Vec3b>(i,j);
t.transfer(src, dst);
}
}
break;
}
return mat ;
Run Code Online (Sandbox Code Playgroud) 我已经使用 Entity Framework 的 Code First 创建了我的数据库模式,其中一个模型有一个复合键(这在 db 中得到了完美的反映)。
但是,当我尝试使用组合键列表查找记录时,我收到一个异常,提示:“无法创建类型为 '匿名类型' 的常量值。此上下文中仅支持原始类型或枚举类型。”
这是我最后使用的失败的代码(它的变体也产生了相同的错误):
var ids = models.Select(m => new { m.Id, m.InstanceId })
.ToArray();
var records = _dataService.TableWithCompositeKey
.Where(t => ids.Contains(new { t.Id, t.InstanceId }))
.ToArray();
Run Code Online (Sandbox Code Playgroud)
评估记录时抛出异常。那么我怎样才能完成这样的任务呢?
在包含副本的表中更新未索引的常规列(不是主键相关)的最佳方法是什么?
即,用户发布了一些内容,并且该帖子在许多表中都是重复的,以便快速检索.但是当该帖子发生更改(使用编辑)时,需要在包含该帖子的所有表中(在具有不同和未知主键的表中)更新整个数据库.
我正在考虑的解决方案:
任何启发将不胜感激.
编辑(虚构架构).
如果帖子发生变化怎么办?甚至是用户的display_name?
CREATE TABLE users (
id uuid,
display_name text,
PRIMARY KEY ((id))
);
CREATE TABLE posts (
id uuid,
post text,
poster_id uuid,
poster_display_name text
tags set<text>,
statistics map<int, bigint>,
PRIMARY KEY ((id))
);
CREATE TABLE posts_by_user (
user_id uuid,
created timeuuid,
post text,
post_id uuid,
tags set<text>,
statistics map<int, bigint>,
PRIMARY KEY ((id), created)
);
Run Code Online (Sandbox Code Playgroud) 我是StructureMap的新手,我一直试图解决这个错误已经有一段时间了.只是无法弄清楚如何解决它以及我在哪里做错了.我甚至设置了一个MVC4模板网站,其中没有任何内容,但仍然出现错误.
有人可以帮帮我吗?
public static class IoC {
public static IContainer Initialize() {
ObjectFactory.Initialize(x =>
{
x.Scan(scan =>
{
scan.TheCallingAssembly();
scan.WithDefaultConventions();
});
x.For<IDbSession>().Use(() => MvcApplication.DbSession);
x.For<IDbService>().Use<DbService>();
});
return ObjectFactory.Container;
}
}
Run Code Online (Sandbox Code Playgroud)
public class HomeController : Controller
{
protected readonly IDbService _dbService;
public HomeController(IDbService dbService)
{
_dbService = dbService;
}
...
}
Run Code Online (Sandbox Code Playgroud)
public interface IDbSession : IDisposable
{
void Commit();
void Rollback();
}
Run Code Online (Sandbox Code Playgroud)
public interface IDbService
{
StudentsService Students { get; }
CoursesService Courses { get; }
...
}
Run Code Online (Sandbox Code Playgroud)
public class DbService …Run Code Online (Sandbox Code Playgroud) c# ×2
c#-5.0 ×2
typescript ×2
.net ×1
asp.net-mvc ×1
async-await ×1
c++ ×1
cassandra ×1
deadlock ×1
java ×1
jodatime ×1
momentjs ×1
nosql ×1
structuremap ×1
systemjs ×1
vue.js ×1
vuejs2 ×1