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)
但似乎这是一个死锁,屏幕上没有任何内容.
我想了解更多有关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怎么样?
为什么我不能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类的原因是什么?