selenium-hub 相关问题


linux下如何识别USB HUB(根)和连接到HUB(根设备)的设备(子设备)?

我想编写一个应用程序来从连接的USB集线器读取数据(iSerial信息)到linux以及将其他设备连接到该USB集线器。 -> 我想先检测USB Hub是否连接...


将 Spring Security 5 迁移到 Spring Security 6 HttpSecurity 问题

Spring Security 6 中以下代码应该替代什么? http .authorizeRequests() .requestMatchers("/hub/**").access("hasPermission('SOME_LAYER', '')")...


chromewebdriver 未启动

**来自 selenium 导入 webdriver driver=webdriver.Chrome("C:\Users cer\Download


Docker hub 的存储库数量限制

过去一周我一直在使用 Docker,并在 Dockerhub 上创建了一些新的存储库。在 Dockerhub 上创建存储库的数量有限制吗?


是否可以在不安装Chrome应用程序的情况下使用Selenium?

如标题所示,是否可以在不下载整个 Google Chrome 应用程序的情况下使用 Selenium?我想知道这一点,因为你可以在 replit 上运行 Selenium 而不会出现任何问题,但是......


Selenium,如何定位并单击特定按钮

我正在使用 selenium 尝试抓取此网站中的产品列表: https://www.zonacriativa.com.br/harry-potter 但是,我无法获取完整的产品列表。该页面...


为什么 docker 登录无法使用正确的凭据工作?

我正在尝试在 Linux 机器上进行 docker 登录。我正在使用 docker hub 用户名“undrewb”和用于登录 hub.docker.com 的密码。为什么这不起作用?我没有登录 GUI 和 docker


Selenium Web 驱动程序(如果样式高度为 0)

我试图让 selenium webdriver 脚本在样式的高度为 0 时执行某些操作。我可以使用 element.value_of_css_property 命令打印它,但我想将其用作 if 状态...


Python - Selenium:“os.system”和“driver.get()”问题

我在使用 selenium 打开 localhost:9222 时遇到问题,代码如下: #-- 导入库: 导入时间 导入操作系统 导入单元测试 从硒导入网络驱动程序 来自 selenium.webdriver.common.by 我...


使用 Selenium 抓取带有嵌入式 Javascript 的网站

我是 Selenium 新手,正在尝试抓取该网站的内容。但是,该网站似乎基于模板和运行来填充它的 Javascript,我不知道如何访问


应用程序无法正确启动0xc000007b selenium-manager.exe

我有一个使用 selenium 的 C# 应用程序 使用 OpenQA.Selenium.Chrome; 使用 OpenQA.Selenium; 使用系统; 使用系统线程; 在大多数计算机(Windows 10 或 11)上运行该程序...


Selenium python 找不到 div insideText

我想使用 selenium python 机器人定期加载网站的新消息。 消息以带有innerText 的div 形式出现。 这是我的脚本使用 xPath 检查的部分: ` 尝试: 而真实: 混乱...


如何在 ASP.NET MVC 中将参数和数据从控制器发送到 SignalR hub?

我使用 ASP.NET MVC。我想将数据从控制器发送到集线器以发送给客户端。我在控制器中编写了这段代码: 公共类 SampleController :控制器 { 私人只读 IHubCo...


Heroku docker:Mac 苹果硅处理器上出现错误

所以,我的本地 docker 环境与 docker hub 桌面应用程序都能正常工作。但是当我尝试使用部署到heroku时 heroku 容器:push web -a 你的应用程序名称 它给出了一个错误说 不支持:


Chromedriver 不存在(golang selenium)

我开始在golang中学习selenium并尝试用它来抓取网页,但是当我运行我的应用程序时,我收到了这个错误: 错误:exec:“./chromedriver”:文件不存在退出状态1 这我...


Selenium:如何获取画布标签内元素的定位器

我有一个实现 Canvas 标签的 Web 应用程序。在一个画布部分内有多个按钮和其他元素。我想使用 Selenium 单击画布标签内的按钮


Selenium 无法将键发送到组合框元素

我一直在尝试使用 selenium 创建一种自动方式将股票添加到谷歌财经。我可以登录并添加新投资,但这就是我陷入困境的地方。 步骤...


使用 selenium webdriver 自动化 Flutter Web 应用程序

我是颤振新手。所以,我想知道是否可以使用 selenium webdriver/java 来自动化 flutter web 应用程序。 我使用 java / cucumber 来自动化 Web 应用程序并使用页面对象


如何阻止 Selenium 修剪字符串末尾的空格?

如何阻止 Selenium 修剪字符串末尾的空格? 该空间在应用程序中是必要的,因此我想确保保留该空间,以便我可以断言正确的间距...


Chrome 浏览器在运行 selenium chrome webdriver 后关闭

我目前正在学习 Selenium 4.0,并设置了一个基本脚本,可以单击 Python 网站上的按钮。我正在使用 Chrome 网络驱动程序。但每当我运行代码时,都会打开一个 chrome 窗口,显示


有没有办法将selenium chrome(驱动程序)窗口嵌入到tkinter窗口中?

这里是初学者。我正在使用 Tkinter 来操作 Selenium。日志和其他信息也部分显示在 Tkinter 中,但当我使用它时,这两个窗口处理起来变得很麻烦。恳求...


TypeError:WebDriver.__init__() 获得意外的关键字参数“chrome_options”

从 selenium 导入 webdriver 从 selenium.webdriver.chrome.options 导入选项 选项 = 选项() options.binary_location = "C:/Program Files (x86)/Google/Chrome/Application/chrome.exe&...


Selenium 4.16 Python:(没有这样的元素)和(会话信息:chrome=120.0.6099.130);有关此错误的文档)

在此输入我尝试在 Py Charm 上使用 Selenium 4.16,我运行以下代码并收到错误消息: 从硒导入网络驱动程序 从 selenium.webdriver.common.by 导入 驱动程序=网络驱动程序。


Python 中的 Selenium - 我无法从 <a> 元素中提取文本

有了这段Python代码,我有: main_div = driver.find_element(By.XPATH,"//div[@class='am-appointments am-section']")#该类只有一个 child_div = main_div.find_elements...


Selenium 找不到标签

chrome 开发工具 我无法获取 xmp 标签或类“note”出现错误 我尝试过这些 # status = driver.find_element(By.CSS_SELECTOR, value=".msgdiv") 状态=司机。


在自动化测试中,selenium 是一个框架、工具还是库,因为很少有人提到它有框架,很少有人说它有框架,有人说它有库?

selenium 是一个框架、工具还是库。我已经看到硒在很多地方被视为框架,如果是的话,硒中实现的控制反转在哪里。


Chrome 58 URL 中的数据不安全

最近升级到 Chrome 58 引起了问题。当 Selenium 启动 Chrome 实例时,它不会像 Chrome 57 那样导航到初始 URL。现在,当通过


不安全无数据块在chrome浏览器中自动化执行

我在selenium 4.16.0,chrome-120.0.6099.217中使用了上面的代码 从 selenium.webdriver.edge.service 导入服务 service_obj = 服务() 驱动程序 = webdriver.Chrome(service=service_obj) 司机....


Python selenium scraper 总是返回空列表

即使明显存在具有指定类名的元素,以下代码也始终返回空列表: 从硒导入网络驱动程序 从 selenium.webdriver.common.by 导入 夫...


Selenium:“ElementClickInterceptedException”,元素不可点击,因为另一个元素遮挡了它

我正在尝试使用硒单击此网站 https://covid19-vaccine-report.ecdc.europa.eu/#6_Reported_data 上的“CSV”按钮。 但是,使用下面的代码我收到了呃...


我用 Selenium 打开浏览器,但是打开浏览器后,它立即关闭。我希望它保持打开状态,我该如何实现?

def open_chrome(自我): 浏览器 = webdriver.Chrome() browser.get('https://www.google.com.br') def open_youtube(自我): youtube = webdriver.Chrome() youtube.get('https://www.y...


在 Eclipse 中没有收到“添加未实现的方法”错误

我正在使用 Java 开发 Selenium 并使用监听器。 我创建了该类,导入了 TestNG,然后添加了方法: 公共类 Listener 实现 ITestListener{ } 我在“


使用 Selenium/Requests 进行网页抓取并通过 CloudFare - Python

我正在尝试抓取一个使用 Cloudflare DNS 和 CDN/代理的网站。我尝试过 Tor、Selenium_stealth 和 UnDetected_Chrome,但都已被检测到。有什么办法可以绕过 CLoudfare


Selenium - 元素点击被拦截:元素不可点击

我遇到一些按钮的问题。它们不可点击。 例如: 单击此按钮: 在此输入图像描述 在 https://generator.ninja/games/random-cards/ 由于某些原因,它不是


如何在 Selenium IDE (Chrome) 中自动递增数字

我一直在尝试创建一个循环脚本,每次循环都会将数字加 1。 这些是命令: 商店 | 1 |我| 时代 | 5 | 执行脚本 |返回 ${i} + 1; |我| 回声| ${...


Chrome 驱动程序 113 不支持现有 Chrome 浏览器版本 120.0.6099.130

当我在启动浏览器时运行 jmeter - selenium Web 驱动程序脚本时出现以下错误 Org.openqa.selenium.SessionNotCreatedException:无法启动新会话。响应代码 500。混乱...


使用 Selenium 抓取“延迟加载”图像

我正在开发一个使用硒的小型网络抓取项目,其中我从服装网站上抓取了一些产品信息:(https://www.asos.com/us/search/?q=shirt),我'我已经能够得到 mos...


OpenQA.Selenium.NoSuchElementException:没有这样的元素:无法找到元素

我有一个网页,我正在尝试使用此练习网站 https://practicetestautomation.com/practice-test-login/ 使用 selenium 实现自动化,我的脚本中有等待条件,所以我不确定为什么


Java Selenium——最好的选择?

我刚刚获得大学计算机科学专业的第一份实习机会。 我正在尝试比较应该为该公司的网站使用哪种网络自动化工具。 硒似乎是我最大的......


如何在 Java Selenium 中创建包含多个连接定位器的工厂元素定位器

例如,页面有一个定位器 id =“test1”的容器字段和另一个定位器 id =“field1”的字段 加入的定位器应在定位器 id = "...


Selenium Grid 未检测到 Docker yaml 文件中的集成

我正在尝试为我的投资组合构建一个自动化测试项目。但我面临着同样的问题。我创建了一个 Docker YAML 文件来编写配置以在 chrome 和


使用 python 和 selenium 在 Palo Alto 网站上发送 2FA 电子邮件

我正在尝试编写一个脚本,该脚本将从帕洛阿尔托网络网站下载文件。 我正在编写的脚本成功输入了用户名和密码,但是 2FA 部分com...


特定标签的selenium xpath

此输入标签的 Xpath 是什么 ” 此输入标签的 Xpath 是什么 "<input autocapitalize="sentences" autocorrect="off" class="css-1cwyjr8 r-19sur4y r-qklmqi r-1phboty r-1wdu9aa r-ubezar r-16dba41 r-10paoce r-12rqra3 r-13qz1uu" dir="auto" spellcheck="false" type="email" data-focusable="true" value="" style="font-family: inherit;"> 如果只有 @type=email 的元素,则可以使用 //input[@type='email']


使用selenium在联合选择/列表元素中导航

我正在使用 beautifulSoup / selenium 进行一些网络抓取,但在使用某个下拉选择菜单时遇到了困难。粗略的 HTML 如下: 我正在使用 beautifulSoup / selenium 进行一些网络抓取,但在使用某个下拉选择菜单时遇到了困难。粗略的HTML如下: <div class="selection-box" alt="selection" title="selection" role="select" tabindex="0"> <select id="select" style="display: none;"> <option value="1">First</option> <option value="2">Second</option> <option value="3" selected="selected">Third</option> </select> <div class="current">Third</div> <ul class="options" style="display: none;"> <li class="search--option" alt="First option" title="First option" aria-label="First option" role="option" tabindex="0">First</li> <li class="search--option" alt="Second option" title="Second option" aria-label="Second option" role="option" tabindex="0">Second</li> <li class="search--option selected" alt="Third option" title="Third option" aria-label="Third option" role="option" tabindex="0">Third</li> </ul> 当我通过浏览器操作菜单时,它会发生如下变化: 包装 div 类更改为“选择框活动” ul 更改为“display: block” 一旦我选择了不同的选项,这两个选项就会再次颠倒,中间的 div 和所选的 li 项目也会相应变化 我想使用selenium来选择某个选项。到目前为止,我尝试了以下方法: from selenium.webdriver.support.ui import Select drpBrand = driver.find_element(By.ID, "select"); css = 'select#select' # css selector of the element js = """const data_options = Array.from(document.querySelectorAll('{css}')); data_options.forEach(a=>{{a.style='display:block;';}});""".format(css=css) driver.execute_script(js) drpBrand.select_by_visible_text("Third"); 这是使用各种线程的最佳方法(元素不可见:元素当前不可见并且可能无法操作 - Selenium webdriver,How to select a dropdown value in Selenium WebDriver using Java),但它仍然没有不工作。有任何想法吗?我想我还需要定位列表(除了选择之外)? 错误总是存在 selenium.common.exceptions.ElementNotInteractableException:消息:元素不可交互:元素当前不可见,可能无法操作 谢谢 如果我正确理解您的目标(选择下拉选项),我建议模拟本机用户行为并依赖可见元素。 下拉元素有选择器 .superstar-search--selection-box。 您应该等待它出现并单击它。 下拉选项有选择器 .superstar-search--option 。您应该等待此元素的可见性并过滤它们,例如,通过包含文本条件。 您可以通过将下拉打开选择器和下拉选项选择器定义为函数参数来构建比我编写的更复杂的函数。 from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC driver = webdriver.Chrome() driver.get("https://www.wwe.com/superstars") wait = WebDriverWait(driver, 15) def select_dropdown_option_by_text(text): dropdown = wait.until(EC.presence_of_element_located((By.CSS_SELECTOR, '.superstar-search--selection-box'))) dropdown.click() options = wait.until(EC.visibility_of_all_elements_located((By.CSS_SELECTOR, '.superstar-search--option'))) expected_option = [element for element in options if element.text.lower() == text] expected_option[0].click() select_dropdown_option_by_text('all superstars')


Python、selenium、pyautogui - 如何并行运行多个独立的浏览器,每个浏览器都有自己独立的鼠标光标?

我希望我的程序能够在单独的网络浏览器中同时执行各种自动化任务,更具体地说:同时模拟每个浏览器中的鼠标移动。我不知道如何实现


如何在 Selenium/Python 的参数化测试中从下拉列表中选择一个项目,其中 select 方法位于页面对象中?

我的测试会遍历下拉列表中的每个值。在应用程序中,用户选择一个值,单击按钮将该值与其本身相乘,然后应用程序显示该计算的结果...


使用python的mechanize自动网站登录

我正在尝试自动登录一个网站,该网站的登录表单具有以下 HTML 代码(摘录): 我正在尝试自动登录一个网站,其登录表单具有以下 HTML 代码(摘录): <tr> <td width="60%"> <input type="text" name="username" class="required black_text" maxlength="50" value="" /> </td> <td> <input type="password" name="password" id="password" class="required black_text" maxlength="50" value="" /> </td> <td colspan="2" align="center"> <input type="image" src="gifs/login.jpg" name="Login2" value="Login" alt="Login" title="Login"/> </td> </tr> 我正在使用python的mechanize模块进行网页浏览。以下是代码: br.select_form(predicate=self.__form_with_fields("username", "password")) br['username'] = self.config['COMMON.USER'] br['password'] = self.config['COMMON.PASSWORD'] try: request = br.click(name='Login2', type='image') response = mechanize.urlopen(request) print response.read() except IOError, err: logger = logging.getLogger(__name__) logger.error(str(err)) logger.debug(response.info()) print str(err) sys.exit(1) def __form_with_fields(self, *fields): """ Generator of form predicate functions. """ def __pred(form): for field_name in fields: try: form.find_control(field_name) except ControlNotFoundError, err: logger = logging.getLogger(__name__) logger.error(str(err)) return False return True return __pred 不知道我做错了什么...... 谢谢 该网站有可能在登录期间使用java脚本进行回发。我记得很清楚,对于 ASP .Net 站点,您需要获取隐藏表单字段,例如 VIEWSTATE 和 EVENTTARGET 并将它们发布到新 Page 。 您为什么不发送问题网站的链接?之后就变得相对容易弄清楚了 尝试使用 Selenium 和 PhantomJS from selenium import PhantomJS import platform if platform.system() == 'Windows': # .exe for Windows PhantomJS_path = './phantomjs.exe' else: PhantomJS_path = './phantomjs' service_args = [ # Proxy (optional) '--proxy=<>', '--proxy-type=http', '--ignore-ssl-errors=true', '--web-security=false' ] browser = PhantomJS(PhantomJS_path, service_args=service_args) browser.set_window_size(1280, 720) # Window size for screenshot (optional) login_url = "<url_here>" # Credentials Username = "<insert>" Password = "<insert>" # Login browser.get(login_url) browser.save_screenshot('login.png') print browser.current_url browser.find_element_by_id("<username field id>").send_keys(Username) browser.find_element_by_id("<password field id>").send_keys(Password) browser.find_element_by_id("<login button id>").click() print (browser.current_url) browser.get(scrape_url) print browser.page_source browser.quit() ''' python 和 pycharm 设置路径变量 点维辛检查 包管理器 python 如何安装新版本 python最新版本 - python 3.7.2 用户环境变量 蟒蛇 pyton 中的命令行 '''


在 C# 中将 Task<T> 转换为 Task<object>,无需 T

我有一个充满扩展方法的静态类,其中每个方法都是异步的并返回一些值 - 像这样: 公共静态类 MyContextExtensions{ 公共静态异步任务 我有一个充满扩展方法的静态类,其中每个方法都是异步的并返回一些值 - 像这样: public static class MyContextExtensions{ public static async Task<bool> SomeFunction(this DbContext myContext){ bool output = false; //...doing stuff with myContext return output; } public static async Task<List<string>> SomeOtherFunction(this DbContext myContext){ List<string> output = new List<string>(); //...doing stuff with myContext return output; } } 我的目标是能够从另一个类中的单个方法调用这些方法中的任何一个,并将其结果作为对象返回。它看起来像这样: public class MyHub: Hub{ public async Task<object> InvokeContextExtension(string methodName){ using(var context = new DbContext()){ //This fails because of invalid cast return await (Task<object>)typeof(MyContextExtensions).GetMethod(methodName).Invoke(null, context); } } } 问题是转换失败。我的困境是我无法将任何类型参数传递给“InvokeContextExtension”方法,因为它是 SignalR 中心的一部分并且由 javascript 调用。在某种程度上,我不关心扩展方法的返回类型,因为它只会序列化为 JSON 并发送回 javascript 客户端。但是,我确实必须将 Invoke 返回的值转换为任务才能使用等待运算符。我必须为该“任务”提供一个通用参数,否则它将把返回类型视为 void。因此,这一切都归结为如何成功地将具有通用参数 T 的任务转换为具有对象通用参数的任务,其中 T 表示扩展方法的输出。 您可以分两步完成 - await使用基类执行任务,然后使用反射或dynamic收获结果: using(var context = new DbContext()) { // Get the task Task task = (Task)typeof(MyContextExtensions).GetMethod(methodName).Invoke(null, context); // Make sure it runs to completion await task.ConfigureAwait(false); // Harvest the result return (object)((dynamic)task).Result; } 这是一个完整的运行示例,它将上述通过反射调用 Task 的技术置于上下文中: class MainClass { public static void Main(string[] args) { var t1 = Task.Run(async () => Console.WriteLine(await Bar("Foo1"))); var t2 = Task.Run(async () => Console.WriteLine(await Bar("Foo2"))); Task.WaitAll(t1, t2); } public static async Task<object> Bar(string name) { Task t = (Task)typeof(MainClass).GetMethod(name).Invoke(null, new object[] { "bar" }); await t.ConfigureAwait(false); return (object)((dynamic)t).Result; } public static Task<string> Foo1(string s) { return Task.FromResult("hello"); } public static Task<bool> Foo2(string s) { return Task.FromResult(true); } } 一般来说,要将 Task<T> 转换为 Task<object>,我会简单地采用简单的连续映射: Task<T> yourTaskT; // .... Task<object> yourTaskObject = yourTaskT.ContinueWith(t => (object) t.Result); (文档链接在这里) 但是,您实际的具体需求是 通过反射调用 Task 并获取其(未知类型)结果 。 为此,您可以参考完整的dasblinkenlight的答案,它应该适合您的具体问题。 我想提供一个实现,恕我直言,这是早期答案的最佳组合: 精确的参数处理 无动态调度 通用扩展方法 给你: /// <summary> /// Casts a <see cref="Task"/> to a <see cref="Task{TResult}"/>. /// This method will throw an <see cref="InvalidCastException"/> if the specified task /// returns a value which is not identity-convertible to <typeparamref name="T"/>. /// </summary> public static async Task<T> Cast<T>(this Task task) { if (task == null) throw new ArgumentNullException(nameof(task)); if (!task.GetType().IsGenericType || task.GetType().GetGenericTypeDefinition() != typeof(Task<>)) throw new ArgumentException("An argument of type 'System.Threading.Tasks.Task`1' was expected"); await task.ConfigureAwait(false); object result = task.GetType().GetProperty(nameof(Task<object>.Result)).GetValue(task); return (T)result; } 您不能将 Task<T> 转换为 Task<object>,因为 Task<T> 不是协变的(也不是逆变的)。最简单的解决方案是使用更多反射: var task = (Task) mi.Invoke (obj, null) ; var result = task.GetType ().GetProperty ("Result").GetValue (task) ; 这很慢且效率低下,但如果不经常执行此代码则可用。顺便说一句,如果您要阻塞等待其结果,那么异步 MakeMyClass1 方法有什么用呢? 另一种可能性是为此目的编写一个扩展方法: public static Task<object> Convert<T>(this Task<T> task) { TaskCompletionSource<object> res = new TaskCompletionSource<object>(); return task.ContinueWith(t => { if (t.IsCanceled) { res.TrySetCanceled(); } else if (t.IsFaulted) { res.TrySetException(t.Exception); } else { res.TrySetResult(t.Result); } return res.Task; } , TaskContinuationOptions.ExecuteSynchronously).Unwrap(); } 它是非阻塞解决方案,将保留任务的原始状态/异常。 最有效的方法是自定义等待者: struct TaskCast<TSource, TDestination> where TSource : TDestination { readonly Task<TSource> task; public TaskCast(Task<TSource> task) { this.task = task; } public Awaiter GetAwaiter() => new Awaiter(task); public struct Awaiter : System.Runtime.CompilerServices.INotifyCompletion { System.Runtime.CompilerServices.TaskAwaiter<TSource> awaiter; public Awaiter(Task<TSource> task) { awaiter = task.GetAwaiter(); } public bool IsCompleted => awaiter.IsCompleted; public TDestination GetResult() => awaiter.GetResult(); public void OnCompleted(Action continuation) => awaiter.OnCompleted(continuation); } } 具有以下用法: Task<...> someTask = ...; await TaskCast<..., object>(someTask); 这种方法的局限性在于结果不是 Task<object> 而是一个可等待的对象。 我根据dasblinkenlight的回答做了一个小小的扩展方法: public static class TaskExtension { public async static Task<T> Cast<T>(this Task task) { if (!task.GetType().IsGenericType) throw new InvalidOperationException(); await task.ConfigureAwait(false); // Harvest the result. Ugly but works return (T)((dynamic)task).Result; } } 用途: Task<Foo> task = ... Task<object> = task.Cast<object>(); 这样您就可以将 T 中的 Task<T> 更改为您想要的任何内容。 对于最佳方法,不使用反射和动态丑陋语法,也不传递泛型类型。我将使用两种扩展方法来实现这个目标。 public static async Task<object> CastToObject<T>([NotNull] this Task<T> task) { return await task.ConfigureAwait(false); } public static async Task<TResult> Cast<TResult>([NotNull] this Task<object> task) { return (TResult) await task.ConfigureAwait(false); } 用途: Task<T1> task ... Task<T2> task2 = task.CastToObject().Cast<T2>(); 这是我的第二种方法,但不推荐: public static async Task<TResult> Cast<TSource, TResult>([NotNull] this Task<TSource> task, TResult dummy = default) { return (TResult)(object) await task.ConfigureAwait(false); } 用途: Task<T1> task ... Task<T2> task2 = task.Cast((T2) default); // Or Task<T2> task2 = task.Cast<T1, T2>(); 这是我的第三种方法,但是不推荐:(类似于第二种) public static async Task<TResult> Cast<TSource, TResult>([NotNull] this Task<TSource> task, Type<TResult> type = null) { return (TResult)(object) await task.ConfigureAwait(false); } // Dummy type class public class Type<T> { } public static class TypeExtension { public static Type<T> ToGeneric<T>(this T source) { return new Type<T>(); } } 用途: Task<T1> task ... Task<T2> task2 = task.Cast(typeof(T2).ToGeneric()); // Or Task<T2> task2 = task.Cast<T1, T2>(); 将 await 与动态/反射调用混合使用并不是一个好主意,因为 await 是一条编译器指令,它会围绕调用的方法生成大量代码,并且使用更多反射来“模拟”编译器工作并没有真正的意义,延续、包装等 因为您需要的是在运行时管理代码,然后忘记在编译时工作的 asyc await 语法糖。重写 SomeFunction 和 SomeOtherFunction 而不使用它们,并在运行时创建的您自己的任务中开始操作。您将得到相同的行为,但代码非常清晰。


© www.soinside.com 2019 - 2024. All rights reserved.