相关疑难解决方法(0)

这两个方法返回Task的区别

这两种方法之间的语义差异是什么?

    public Task DoSomething()
    {
        return Task.Run(() => MyFunction());
    }

    public async Task DoSomethingAsync()
    {
        await Task.Run(() => MyFunction());
    }
Run Code Online (Sandbox Code Playgroud)

有什么我应该考虑在一个或另一个之间做出选择吗?

c# async-await

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

呼叫同步和异步方法有什么不同吗?

.NET 4.6

带有“异步”的带有await的调用方法与没有“异步”的相同方法之间有什么区别?

protected Task<MyObject<T>> MyMethod1<T>(string parameter)
{
    return CallDb();
}

protected async Task<MyObject<T>> MyMethod2<T>(string parameter)
{
    return await CallDb();
}

// Calling these
public async Task<IEnumerable<string>>(string parameter)
{
    return await MyMethod1<string>(parameter);
    // Any difference?
    return await MyMethod2<string>(parameter);
}

public Task<string> CallDb()
{
}
Run Code Online (Sandbox Code Playgroud)

c# async-await

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

异步/等待,运行阻止UI没有明显的原因

我再一次重新研究了异步任务.无论我如何设置任务,我的应用程序一直受到UI冻结的影响.我有以下代码从网页下载字符串:

internal string DownloadString(string URL)
{
      var result =  LoadCompanyContracts(URL);
      return result.Result;
}

internal async Task<string> LoadCompanyContracts(string URL)
{
Task<string> task2 = Task<string>.Factory.StartNew(() =>
{
     for (int i = 0; i <= 10000000; i++) Console.WriteLine(i);
     WebClient wc = new WebClient();
     string tmp = wc.DownloadString(new Uri(URL));
     return tmp;
});
return task2.Result;

}
Run Code Online (Sandbox Code Playgroud)

当我执行此任务时,在for循环期间,我的应用程序的UI正在冻结.即使我相信这段代码不应该冻结UI我也无法找到解决方案.我尝试了很多不同的选项,并且真的想使用任务而不是使用webclient异步的线程或事件.

信息:我正在为我的项目使用.net 4.5.我的代码的不同之处在于这些函数在类库中(不知道它是否重要).

是否可以通过从我的代码中调用DownloadString函数来运行此代码而不用异步await阻止用户界面?如果不是什么替代品(任何好的nuget包)?

c# wpf asynchronous task

0
推荐指数
1
解决办法
155
查看次数

为什么在尝试在另一个线程上运行异步方法时收到警告?

我有一个异步方法,它调用另一个异步方法,但是,我希望它在单独的线程上并行运行:

public async Task<Page> ServePage() {
  Task.Run(() => DoThings(10));   // warning here

  // ... other code
  return new Page();
}

public async Task DoThings(int foo) {
  // stuff
}
Run Code Online (Sandbox Code Playgroud)

警告指出:

由于不等待此调用,因此在调用完成之前将继续执行当前方法。考虑将“await”运算符应用于调用结果。

事实上,这就是我正在努力做的事情。为什么我会收到编译器警告?Task.Run 的语法是否不正确?

c# async-await

0
推荐指数
1
解决办法
2407
查看次数

使用不带等待功能的异步函数,该函数包含另一个返回void的函数

所以我有这个WrapperFunction试图使FunctionReturningVoid被异步调用:

    public async Task WrapperFunction()
    {
        this.FunctionReturningVoid("aParameter");
    }
Run Code Online (Sandbox Code Playgroud)

这是什么都不返回的函数。在代码的某些部分(此处未详细介绍),它被称为SYNChronously,但在CallerFunction()中,我们希望它以ASYNChronously运行。

    public void FunctionReturningVoid(string myString)
    {
        Console.Write(myString);
    }
Run Code Online (Sandbox Code Playgroud)

这是已实现异步的函数,需要WrapperFunction进行操作而不阻塞otherStuff()。

    public async Task CallerFunction()
    {
        await WrapperFunction():
        int regular = otherStuff();
        ...
    }
Run Code Online (Sandbox Code Playgroud)

IDE向我警告WrapperFunction没有使用await:

这种异步方法缺少“等待”运算符,将同步运行。考虑使用“ await”运算符来等待非阻塞API调用,或者使用“ await Task.Run(...)”来在后台线程上执行CPU绑定的工作。

问题:如何在WrapperFunction中使用异步而不使用await?如果我使用await,它告诉我不能等待void。

c# async-await

0
推荐指数
1
解决办法
85
查看次数

在任务中使用异步等待的测试方法

我有这个代码

public class ClassToTest
{
    private readonly IRepository repository;

    public ClassToTest(DI GOES HERE){...}

    public DoSomething() 
    {
        Task.Run(async () => {
            //some code
            repository.ExecuteAsync();
        }
    }
}

public class Repository : IRepository
{
    public Task ExecuteAsync()
    {
        using (var connection = new SqlConnection(DbConfiguration.DatabaseConnection))
        {
            return connection.ExecuteAsync(storedProcedure, parameters, commandType: CommandType.StoredProcedure, commandTimeout: Configuration.TransactionTimeout);
        }
    }
}

[Test]
public void TestMethod()
{
    var repository = new Mock<IRepository>;
    var classToTest =  new ClassToTest();

    classToTest.DoSomething();

    repository.Veryfy(p => p.ExecuteAsync(), Times.Once());
}
Run Code Online (Sandbox Code Playgroud)

测试失败并显示此消息

模拟一次的预期调用,但是是0次:p => p.ExecuteAsync()

有谁知道为什么?

谢谢

c# nunit async-await

-1
推荐指数
1
解决办法
548
查看次数

标签 统计

c# ×6

async-await ×5

asynchronous ×1

nunit ×1

task ×1

wpf ×1