小编Lar*_*rry的帖子

如何在例如Main()中调用async方法?

public class test
{
    public async Task Go()
    {
        await PrintAnswerToLife();
        Console.WriteLine("done");
    }

    public async Task PrintAnswerToLife()
    {
        int answer = await GetAnswerToLife();
        Console.WriteLine(answer);
    }

    public async Task<int> GetAnswerToLife()
    {
        await Task.Delay(5000);
        int answer = 21 * 2;
        return answer;
    }
}
Run Code Online (Sandbox Code Playgroud)

如果我想在main()方法中调用Go,我该怎么做?我正在尝试c#新功能,我知道我可以将异步方法挂钩到事件并通过触发该事件,可以调用异步方法.

但是如果我想直接在main方法中调用它呢?我怎样才能做到这一点?

我做了类似的事情

class Program
{
    static void Main(string[] args)
    {
        test t = new test();
        t.Go().GetAwaiter().OnCompleted(() =>
        {
            Console.WriteLine("finished");
        });
        Console.ReadKey();
    }


}
Run Code Online (Sandbox Code Playgroud)

但似乎这是一个死锁,屏幕上没有任何内容.

c# asynchronous task async-await

58
推荐指数
6
解决办法
5万
查看次数

如何实现Linq OrderBy方法?

我想了解更多有关linq的信息,例如,如果我想实现一个Select,我会像这样实现

public static IEnumerable<TResult> Select<TSource, TResult>(IEnumerable<TSource> source, Func<TSource, TResult> selector)
{
    foreach (var item in source)
    {
        yield return selector(item);
    }
}
Run Code Online (Sandbox Code Playgroud)

这样的地方

public static IEnumerable<TSource> Where<TSource>(IEnumerable<TSource> source, Func<TSource, bool> predicate)
{
    foreach (var item in source)
    {
        if (predicate(item))
            yield return item;
    }
}
Run Code Online (Sandbox Code Playgroud)

OrderBy怎么样?

c# linq

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

为什么我不能直接调用DbContext.ObjectContext?

为什么我不能DbContext.ObjectContext直接打电话?我可以做这个((IObjectContextAdapter)context).ObjectContext

我认为内部机制是这样的接口的隐式实现

class Program 
{ 
    static void Main(string[] args) 
    { 
        TestClass t = new TestClass(); 
        ((TestInterface)t).TestMethod(); 
        // I can't call t.TestMethod()
        Console.ReadKey(); 
    } 
} 

public interface TestInterface 
{ 
    void TestMethod(); 
} 

public class TestClass : TestInterface 
{ 
    void TestInterface.TestMethod() 
    { 
        Console.WriteLine("abcdefg"); 
    } 
}
Run Code Online (Sandbox Code Playgroud)

我遇到此问题之前是IEnumerable<T>继承IEnumerable,它具有通用版本IEnumerator<T> GetEnumerator()和非泛型版本IEnumerator GetEnumerator(),但您只能调用通用版本而不是非通用版本.因为非泛型的不是类型安全的,作者想隐藏它.

但是DbContext类的原因是什么?

c# entity-framework

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

标签 统计

c# ×3

async-await ×1

asynchronous ×1

entity-framework ×1

linq ×1

task ×1