小编Yaw*_*aza的帖子

为什么我懒得使用Task.ConfigureAwait(continueOnCapturedContext:false);

请考虑以下Windows窗体代码:

private async void UpdateUIControlClicked(object sender, EventArgs e)
    {
        this.txtUIControl.Text = "I will be updated after 2nd await - i hope!";
        await Task.Delay(5000).ConfigureAwait(continueOnCapturedContext: false);
        this.txtUIControl.Text = "I am updated now.";
    }
Run Code Online (Sandbox Code Playgroud)

这里异常是在第3行引发的,因为在等待代码在非UI线程上执行之后.ConfigureAwait(false)有用吗?

c# synchronizationcontext async-await

59
推荐指数
2
解决办法
4万
查看次数

await Task <T>和Task <T> .Result有什么区别?

 public async Task<string> GetName(int id)
    {
        Task<string> nameTask =
            Task.Factory.StartNew(() => { return string.Format("Name matching id {0} = Developer", id); });
        return nameTask.Result;
    }
Run Code Online (Sandbox Code Playgroud)

在上面的方法return语句我使用Task.Result属性.

public async Task<string> GetName(int id)
    {
        Task<string> nameTask =
            Task.Factory.StartNew(() => { return string.Format("Name matching id {0} = Developer", id); });
        return await nameTask;
    }
Run Code Online (Sandbox Code Playgroud)

我在这里使用等待任务.如果我认为await将释放调用线程但是Task.Result将阻止它,我会不会错,它会是正确的吗?

c# multithreading async-await

41
推荐指数
2
解决办法
7624
查看次数

Visual Studio 2017错误:找不到""的项目信息这可能表示缺少项目引用

刚从MSDN网站安装Visual Studio 2017(完整版).创建了一个新的Asp.Net核心Web应用程序(.Net Framework),并选择了.net framework 4.6.项目名称="WebApplicationWithTemplate"

添加了另一个类库类(.Net Standard)的项目,并选择了.net framework 4.6.项目名称="DataAccessRegular"

接下来尝试将类库项目的引用添加到Asp.Net Core Web应用程序,我收到此错误:

在此输入图像描述

找不到 'E:\ Development\VS2017Solution\DataAccessRegular\DataAccessRegular.csproj'的项目信息.这可能表示缺少项目参考.WebApplicationWithTemplate C:\ Program Files(x86)\ Microsoft Visual Studio\2017\Enterprise\MSBuild\Sdks\Microsoft.NET.Sdk\build\Microsoft.NET.Sdk.targets 92

还创建了类库(.net核心)项目[未在上面的屏幕截图中显示]并添加了对asp.net核心项目的引用并仍然得到相同的错误.

另请阅读github上的这个链接,但遗憾的是没有找到它.

问这个问题的关键是因为我想将模型,服务和数据访问层保留在一个单独的项目中.

asp.net-core visual-studio-2017

19
推荐指数
4
解决办法
2万
查看次数

使用IServiceCollection.AddTransient,IServiceCollection.AddSingleton和IServiceCollectionAddScopped方法的实际场景是什么?

看完这个帖子我也能理解之间的差异AddTransient,AddScoped以及AddSingleton然而,我无法看到他们每个人的实际使用情况.

我的理解是

AddTransient

每次客户端请求时创建一个新实例.

services.AddTransient<IDataAccess, DataAccess>();
Run Code Online (Sandbox Code Playgroud)

每次客户端代码请求时,都会返回一个新的DataAccess对象.更可能是构造函数.

AddTransient的用法

如果我们必须访问数据库来读取和更新它并销毁访问对象(DataAccess),最好使用它AddTransient- 不确定线程​​安全性.

AddScopped

为每个http Web请求创建一个新实例.

AddScopped的用法

 services.AddScoped<ShoppingCart>(serviceProvider => ShoppingCart.GetShoppingCart(serviceProvider));
Run Code Online (Sandbox Code Playgroud)

这意味着每个Web请求将具有其自己的购物车实例,该实体意味着每个用户/客户端将具有用于该http Web请求的其自己的购物车实例.

AddSingleton

为所有http Web请求创建单个实例.

AddSingleton的用法

在示例应用程序中找到此代码,但我不明白它是如何有用的.

services.AddSingleton<IHttpContextAccessor, HttpContextAccessor>(); 
Run Code Online (Sandbox Code Playgroud)

有人可以提供一个体面的实际例子,何时使用AddSingleton并检查我对AddTransient和AddScopped的理解是否正确?

c# asp.net-core

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

ASP.Net Core中没有intellisense

通过Visual Studio安装ASP.Net Core ==>新建项目==> Web ==> ASP.Net Web应用程序==>确定==> ASP.Net 5模板.安装后重新启动系统,然后创建一个ASP.NET 5 Template ==> Empty website的新项目.我没有得到任何intellisense和所有类名称都是RED,就好像Visual Studio或Resharper无法找到定义.

这是一些屏幕截图. 在此输入图像描述

并没有智能感知

在此输入图像描述

当使用服务对象时,我期待服务.AddSingleton,service.AddScoped services.AddTransient service.AddLogging等...

我已经重新启动了可视化工作室,但结果仍然相同,但项目编译并按预期运行,但很难在没有智能感知支持的情况下找出新的api.

我有安装了更新1的resharper v 9.

谢谢!

c# resharper asp.net-core

5
推荐指数
2
解决办法
2324
查看次数

async/await如何在ASP.Net应用程序中提供帮助?

在MVC控制器的操作方法中使用async/await可以扩展Web应用程序,因为等待Asp.Net线程池的请求线程被释放,以便它可以处理IIS队列中的此工作进程的其他请求.这意味着如果我们将工作进程的队列长度限制为10,并向异步操作发送50-100个请求,则IIS不应返回HTTP 503错误,因为始终存在从Asp.Net线程池到服务器的空闲线程来电请求.

我有一个WebApi进行如下计算:

public class ValuesController : ApiController
{
    public int GetSum(int x, int y, int timeDelay = 1)
    {
        Thread.Sleep(timeDelay*1000);
        int result = x + y;
        return result;
    }
}
Run Code Online (Sandbox Code Playgroud)

此操作方法只是在将总和结果返回给调用代码之前延迟给定的秒数.非常基本的web api只是为了模仿长时间运行的代码.

接下来是等待结果的MVC异步操作:

public class ThreadStarvationController : Controller
{
    public async Task<ActionResult> CallGetSumWithDelayAsync(int num1 = 5, int num2 = 8, int timeDelay = 60)
    {
        int callingThreadId = Thread.CurrentThread.ManagedThreadId;
        ThreadStarvationModel model = new ThreadStarvationModel();

        string url = "http://localhost:8111/api/values/GetSum?x=" + num1 + "&y=" + num2 + "&timeDelay=" + timeDelay;

        using …
Run Code Online (Sandbox Code Playgroud)

c# asp.net-mvc multithreading threadpool async-await

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

为什么我们不能通过.net中的对象访问静态方法

使用以下代码:

public class test
{
    public static void DoSomething()
    {
        Console.WriteLine("test");
    }
}

public class test2
{
    public test2()
    {
        var a = new test();
        a.DoSomething(); // invalid
        test.DoSomething(); // is valid
    }
}
Run Code Online (Sandbox Code Playgroud)

我需要通过基类访问静态方法,而不是通过实例.

但是,让用户通过实例访问它会有什么不利之处呢?在我看来,它有助于提高可读性.

c#

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